2012-03-13 71 views
1

更新:事实证明,我有一个剩余的this.model = new MasterModel();在我的subViews的initialize()函数中。Backbone.js:通过引用将模型传递给子视图

我想将我的巨大视图分隔成更小的视图,因此我创建了一个“主”布局视图,它将自己附加到一些子视图并将其传递给它们。

但是,似乎当我的子视图更新模型时,这些更改不会反映在“主”视图模型上。

这里就是我想要做的事:

var master = new MasterModel(); 
var masterView = new MasterView({model:master}); 

里面的马西德威的初始化()函数,我这样做:

function: initialize() { 
    this.subView = new subView({model:this.model}); 
} 

以及改变在子视图模型的代码是这样的:

function: setCurrency() { 
    this.model.set({ currency: this.$('.currency').val() }); 
} 

也许我在这里做的事情完全错误?

+0

我没有看到任何你的代码错误至今。你确定该模型没有得到更新吗?或者可能是更新没有反映在视图中的问题? – JayC 2012-03-13 14:55:58

+0

模型有事件,您可以绑定到像“更改”,以更新视图。我可以看看模型的事件绑定以及更新时的功能吗? – websymphony 2012-03-13 15:03:51

+0

@JayC:是的,我很积极。我在主视图中有一个按钮,它有一个附加到它的click事件的警报(JSON.stringify(this.model.toJSON()))。当我点击按钮时,JSON哈希不包含我在子视图中所做的更改。 – ragulka 2012-03-13 16:14:50

回答

0

多少事有一流的“货币”是您的网页上?

我不认为 this.$('.currency').val()意味着你认为它的意思。我觉得你想要的东西像 $(this.el).find('.currency').val()(您正在使用0.9.1?那么你可以缩短,为 $el.find('.currency').val())。你有什么将总是抓住与类“货币”在页面上的第一个项目。 this.$只是对通常为全球Zepto或jQuery对象的便利参考。因此,我的问题。

编辑:等待澄清问题的答复。

+0

我知道。这不是问题。当我在子视图中设置它们后,在SubView中检查模型值时,它们发生了变化,正如我所期望的那样。但是,当我在masterView中检查模型值时,它们不会更改。 – ragulka 2012-03-14 06:07:13

+0

好吧,好的,那么...我们在这里处理两个模型,还是一个?因为这对一个模型来说是不可能的,这对我来说很困惑。根据你在上述问题中的解释,它应该是每个视图都可以引用的模型实例,但是你在这里描述的内容肯定不是一个模型实例。 – JayC 2012-03-14 06:27:29

+0

对不起,事实证明我有一个this.model = new.MasterModel();在我的subView的initialize()函数中。 Sooooo愚蠢的... – ragulka 2012-03-14 10:04:17

-1

让你的模型的整体,而不是这样的:

var master = new MasterModel(); 

使用

window.master = new MasterModel(); 

,然后PAS给你的子视图

function: initialize() { 
    this.subView = new subView({model:window.master}); 
}