我是骨干的新手,我认为其中一件好事就是我无需返回服务器即可访问数据。在我的应用程序的旧版本中,我使用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 :("}); } }); }
答案 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作为所谓的单例返回(例如,在应用程序中只初始化一次),您不需要再进行一次服务器调用。