View的骨干变换模型

Rie*_*bel 26 javascript model-view-controller model view backbone.js

我对Backbone相当新,并提出以下问题:

我有一系列模特.

我有一个显示选项卡的集合视图(包含集合中每个模型的视图).

我有一个模型的视图(内容).

我有一个路由器的路由器.

我想要实现的是像http://jqueryui.com/demos/tabs/这样的功能

我单击选项卡(集合模型),然后想要将模型传递给内容视图,可能会更改它并反映集合中的更改.

我想出了四个解决方案:

在路由器中:

'switchCommunity': function(id) {
        // (a) set new model attributes
        this.view.community.model.set(communities.get(id));

        // (b) replace model
        this.view.community.model = communities.get(id);

        // (c) a custom function of the view changes its model
        this.view.community.changeModel(communities.get(id));

        // (d) a new view
        this.view.community = new View({
            model: communities.get(id)
        })
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是

  • (a)不反映集合中模型的变化

  • (b)不触发(改变)事件,因为视图的初始化函数中的绑定永远不会触发,因为它是一个完全新的模型

  • (c)对我来说似乎是个黑客

  • (d)每次我点击选项卡时都会创建一个新视图(这是性能问题吗?)

这里最好的实践是什么?

zsi*_*tro 15

你的解决方案之一就好了:D

这是你想要的:

this.view.community.model.set(communities.get(id).toJSON());
Run Code Online (Sandbox Code Playgroud)

这也将触发model.on("更改").


Pau*_*cke 8

为什么你认为(c)是黑客?这似乎是一个封装旧模型解除绑定并连接新模型的好地方.