【问题标题】:backbone use existing model data without another call to the server主干使用现有模型数据,无需再次调用服务器
【发布时间】:2011-12-21 02:10:42
【问题描述】:

我是主干新手,我认为其中一件很棒的事情是我可以在不返回服务器的情况下访问数据。在我的应用程序的旧版本中,我使用 jQuery.data 将数据哈希存储在 dom 节点中。

所以我有一个消息列表,当我单击消息时,我想转到一个显示更多详细信息的视图,但我需要的所有详细信息都已经在原始列表中,所以我没有实际上需要再次运行到服务器,我只想更新视图。

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

我的路线看起来像这样,我尝试将“消息”变量传递给 show 函数,但该函数无法使用它。

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

App.Routers.Messages = Backbone.Router.extend({ 路线:{ ““: “指数”, “消息/:id”:“显示” }, 显示:函数(ID){ var message = new Message({ id: id}); 消息.fetch({ 成功:函数(模型,resp){ 新的 App.Views.Show({ model: message}); }, 错误:函数(){ 新错误({消息:“嘿!?它去了吗?抱歉我找不到你的消息”}); window.location.hash = '#'; } }); }, 索引:函数(){ var messages = new App.Collections.Messages(); 消息.fetch({ 成功:函数(){ 新的 App.Views.Index(消息); }, 错误:函数(){ 新错误({消息:“没有找到消息:(”}); } }); }

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

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

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

    所以在索引函数中替换

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

    与

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

    然后在你的 show 函数中替换

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

    与

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

    【讨论】:

    • 虽然我认为你很接近 Paul,但不幸的是,当我单击一条消息时,我在 console.log 中为 show App.messages.get(id) 看到一个“未定义”。另外,使用提供的代码,当返回消息视图时,我想我只会检查消息的长度,如果
    • 这可能与 fetch 从服务器异步检索模型有关
    【解决方案2】:

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

    【讨论】:

    • 有点明白你在说什么,但是当我确实需要进行服务器调用时呢?我试图在没有其他请求的情况下返回之前的页面,但有时我会想要加载新数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多