Backbone View接收常规对象而不是模型

时间:2013-12-08 00:22:21

标签: javascript backbone.js

这里我将模型传递给Backbone视图。

 view = new View ({model:{item:4,name:"Ipad"}});

当我在View.log中调用该模型时。我明白了:

Object {item: 4, title: "Ipad"} 

这不是骨干模型,因此我没有方法 喜欢toJSON。我意识到,如果我定义一个Backbone模型和 通过它一切正常。

view = new GenreView ({model:new Model({title: 4, title: "Ipad"})});

记录

 r {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}

为什么第一种方法不起作用,我该如何解决?

3 个答案:

答案 0 :(得分:2)

简单地说,特殊的'model'选项要求Backbone.Model不是javascript对象。

因此,在创建新的Backbone.Model以传递到视图中时,您是正确的。

据我所知,没有什么可以解决的。

答案 1 :(得分:2)

您需要使用Backbone.Model代替常规JavaScript对象{}

var Item = Backbone.Model.extend({
  // ...
});

实例化Item模型

var myItem = new Item();

现在在视图中使用您的项目

var myView = new View({model: myItem});

此答案假定View设置为

var View = Backbone.View.extends({
  // ...
});

答案 2 :(得分:1)

您可以在视图的initialize方法中将对象强制转换为Backbone模型:

var View = Backbone.View.extend({
  initialize: function(options){
    if (_.isPlainObject(this.model)) {
      this.model = new Backbone.Model(this.model);
    }
  }
});

这样,无论您是通过model实例还是普通对象,视图都可以在Backbone.Model上运行。您可以在此处查看其中的示例:http://jsbin.com/igecEgE/1/edit?js,console