【问题标题】:Backbone.js: pass model to sub-view by referenceBackbone.js:通过引用将模型传递给子视图
【发布时间】:2012-03-29 23:45:52
【问题描述】:

更新:事实证明,我有一个剩余的 this.model = new MasterModel();在我的子视图中初始化()函数。

我正在尝试将我的大视图与较小的视图分开,因此我创建了一个“主”布局视图,该视图将一些子视图附加到自身并将其模型传递给它们。

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

这是我想要做的:

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

在 masterView 的 initialize() 函数中我这样做:

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

而在 subView 中改变模型的代码是这样的:

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

也许我在这里做错了什么?

【问题讨论】:

  • 到目前为止,我没有发现您的代码有任何问题。您确定模型没有更新吗?或者可能是更新没有反映在视图中的问题?
  • 模型有你可以在“改变”时绑定的事件,以更新视图。我可以看看模型的事件绑定以及它更新时的作用吗?
  • @JayC:是的,我很肯定。我在主视图中有一个按钮,它的点击事件附加了一个警报(JSON.stringify(this.model.toJSON()))。当我单击按钮时,JSON 哈希不包含我在子视图中所做的更改。
  • 请显示实际用于修改模型的代码。
  • @JayC:我已根据您的要求更新了问题

标签: reference model backbone.js subview


【解决方案1】:

您的页面上有多少具有“货币”类的东西?

我不认为this.$('.currency').val() 意味着你认为它的意思。我认为您想要类似 $(this.el).find('.currency').val() 的东西(您使用的是 0.9.1 吗?那么您可以将其缩短为 $el.find('.currency').val() )。您所拥有的将始终使用“货币”类获取页面上的第一个项目。 this.$ 只是对通常是全局 Zepto 或 jQuery 对象的方便引用。因此,我的问题。

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

【讨论】:

  • 我知道。那不是问题。当我在子视图中设置模型值后检查子视图中的模型值时,它们已经改变,正如我所料。但是,当我在 masterView 中检查模型值时,它们并没有改变。
  • 好的,好的,所以......我们在这里处理两个模型,还是一个?因为这对于一个模型来说是不可能的,这让我感到困惑。根据您在上述问题中的解释,它应该是每个视图都引用的一个模型实例,但您在此处描述的内容肯定不像单个模型实例。
  • 对不起,原来我有一个 this.model = new.MasterModel();在我的 subView 初始化()函数中。太傻了……
【解决方案2】:

使您的模型全局化,而不是:

var master = new MasterModel();

使用

window.master = new MasterModel();

然后将其传递给您的子视图

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

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多