【问题标题】:Is it correct to do Ajax request from the model in Backbone.js?从 Backbone.js 中的模型执行 Ajax 请求是否正确?
【发布时间】:2013-01-18 19:45:18
【问题描述】:

从 Backbone.js 中的“模型”执行 Ajax 请求是否正确?从“路由器”来看是否更正确? 我不将 RESTful 用于 Backbone(出于其他原因)。当我说“做 Ajax 请求”时,我的意思是在模型中实现了 Ajax 功能。该函数可以在模型之外调用(并且是)。

我的 Web 应用程序不使用路由器(仅使用视图和模型)。当我在应用程序中导航时,我不想在浏览器中有 url 路由。会出现什么问题?

【问题讨论】:

    标签: backbone.js backbone-routing


    【解决方案1】:

    你的路由器应该尽可能干净,所以绝对没有。

    在您的模型中,您定义模型的 URL。

    在您看来,您只需调用 model.fetch()。

    我使用(并看到)的最常见模式是这样做:

    var MyApp.myModel = Backbone.Model.extend({
        url: '/someResourceUrl'
    });
    
    var MyApp.myView = Backbone.View.extend({
        initialize: function() {
            this.model.bind("change",this.render,this);
            this.model.fetch();
        },
        render: function() {
            alert('do awesome stuff here');
        }
    });
    

    【讨论】:

    • 好的。但是 Ajax 请求……在哪里?
    • backbone 在你调用 fetch 时自动处理 ajax 请求。
    • 好的。对不起。我没有评论说我不使用 RESTful 的 Backbone(出于其他原因)。我已经在模型中实现了 Ajax 函数。
    • 您可能应该只覆盖Backbone.Sync,这是 Backbone 每次尝试读取或保存模型到服务器时调用的函数。这意味着 model.fetch() 将简单地使用您需要的任何自定义 ajax 调用。 Here is a SO post 描述了如何做到这一点。
    • 抱歉耽搁了 - 周末放假。是的,您可以在全局级别覆盖 Backbone.sync,但您也可以在单个模型级别执行此操作。因此,您可以在需要的地方覆盖它,并且仍然可以调用 model.fetch();
    【解决方案2】:

    把AJAX请求放到模型里是正确的,因为它是业务逻辑。这是根据一般 MVC 原则以及主干.js 文档:

    "如果您的应用程序需要从服务器收集数据,本地 存储、cookie 等,那么模型就是应该发生这种情况的地方。在 事实上,模型是整个系统中唯一应该知道的地方 例如,关于 XMLHttpRequest 的任何事情。您可能在 为您加载代码并创建模型对象的模型层。” - http://michaux.ca/articles/mvc-architecture-for-javascript-applications

    “模型-视图-控制器(MVC)是一种软件架构模式,它 将信息的表示与用户的表示分离 与之互动。[1][2]该模型由应用程序数据组成, 业务规则、逻辑和功能。” - http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

    "Backbone.Model – 就像 Rails 模型减去类方法。包装一个 业务逻辑中的一行数据。” - http://backbonejs.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      相关资源
      最近更新 更多