2013-12-08 64 views
1

在這裏,我將模型傳遞給骨幹視圖。骨幹視圖接收常規對象而不是模型

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

當我console.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…} 

爲什麼是第一種方法行不通,我該如何解決?

回答

2

它只是特殊的'模型'選項期望Backbone.Model不是一個JavaScript對象。

所以,當你創建一個新的Backbone.Model進入視圖時,你是正確的。

據我所知,沒有什麼可以解決的。

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({ 
    // ... 
}); 
1

你可以投的對象爲骨幹模型視圖的initialize方法:

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

這樣的觀點就可以操作不管你是否通過了Backbone.Model的一個實例或一個普通對象,它都是model。你可以看到它在這裏工作的一個例子:http://jsbin.com/igecEgE/1/edit?js,console