骨干使用现有的模型数据而无需另外调用服务器

时间:2011-12-20 14:33:20

标签: backbone.js

我是骨干的新手,我认为其中一件好事就是我无需返回服务器即可访问数据。在我的应用程序的旧版本中,我使用jQuery.data在dom节点中存储数据哈希。

所以我有一个消息列表,当我点击一条消息时,我想去一个显示更多细节的视图,但我需要的所有细节都已经在原始列表中,所以我不知道实际上需要另一次运行到服务器,我只想更新视图。

然后当我想再回到列表时,我不需要回到服务器,我只想回到原始列表。

我的路线看起来像这样,我试图将'messages'变量传递给show函数,但它不适用于该函数。

我是否误解了骨干的功能?

App.Routers.Messages = Backbone.Router.extend({
    routes: {
        "":             "index",
        "messages/:id":     "show"
    },

    show: function(id){
        var message = new Message({ id: id});
        message.fetch({
            success: function(model, resp){

                new App.Views.Show({ model: message});
            },
            error: function(){
                new Error({message: "Hey!? Were'd it go? sorry I can't find your message"});
                window.location.hash = '#';
            }
        });
    },

    index: function(){

        var messages = new App.Collections.Messages();
        message.fetch({
            success: function(){

                  new App.Views.Index(messages);

            },
            error: function(){
                new Error({ message: "did not find message :("});
            }
        });


    }

2 个答案:

答案 0 :(得分:2)

你也可以用Backbone做你想做的事。

您必须做的唯一更改是将模型集合设置为全局可访问变量。

所以在索引函数中替换

var messages = new App.Collections.Messages();

App.messages = new App.Collections.Messages();

然后在你的show function replace

var message = new Message({ id: id});

var message = App.messages.get(id);

答案 1 :(得分:-1)

问题是路由器的工作方式与此类似:路由,一旦您点击messages /:id视图,它就会重新初始化 new Messages模型等。如果您将获取移动到初始化查看方法并将View作为所谓的单例返回(例如,在应用程序中只初始化一次),您不需要再进行一次服务器调用。