当我只知道主干中的视图时创建视图模型?

Posted

技术标签:

【中文标题】当我只知道主干中的视图时创建视图模型?【英文标题】:Creating a view's model when I only know the view in backbone? 【发布时间】:2013-12-09 10:28:14 【问题描述】:

我可以访问 FooView。

我想创建 FooView.model 实例。

我尝试了fooModel = new FooView.model(),但它不起作用。

【问题讨论】:

【参考方案1】:

主干中的视图没有模型!

FooView 可能是一个视图类,基于名称(javascript 中的一个常见约定是以大写字母开头的类和以小写字母开头的变量)......所以我假设在某个地方,你有一个:

 var myView = new FooView();

对吗?

如果你这样做,你会看到 myView.model 是未定义的。可以在创建时看到:

var myView = new FooView(model: myModel);

那么,myView.model 应该等于 myModel。

实际上,视图的模型属性只是对现有模型的反向引用,视图不会自动创建新的模型实例或任何东西,真的。您实际上可以拥有没有模型的视图,或者将模型的反向引用存储在 myView.coolName 中。将存储视图所需信息的模型放在“模型”中只是一种约定。

因此,总而言之,您可能应该做的事情更像是:

 //FooModel is another class extending from Backbone.Model
 var myModel = new FooModel(fooStuff: "value", otherFooStuff: "something else"...);
 var myView = new FooView(model: myModel);

希望这会有所帮助!

【讨论】:

感谢您的意见。我想将模型的类存储在视图中。并在运行时使用它。 var myModel = new FooView.Model(foostuff: "values");像这样的东西.. 为什么要将Model类存储在View类中?那将是非常不寻常的......话虽如此,你总是可以在课堂上存储任何东西。所以......如果你这样做: FooView.Model = Backbone.Model.extend(...) 然后在 FooView 类中,你会找到一个属性 .Model ,你可以用 new FooView.Model( foostuff:“价值观”)。但是再一次,除了你之外的任何人都会感到非常困惑,因为这是一个存储模型类的奇怪地方。

以上是关于当我只知道主干中的视图时创建视图模型?的主要内容,如果未能解决你的问题,请参考以下文章

计算或选择主干视图实例

d3 数据项作为主干视图

如何从主干中的另一个视图绑定元素上的事件

如何通过主干中的 ajax 调用使用模型渲染多个视图

主干更新视图

在主干视图中显示两个模型?