【问题标题】:Right way to call a model within a view in Backbone (not using RequireJS)在 Backbone 的视图中调用模型的正确方法(不使用 RequireJS)
【发布时间】:2014-02-04 02:17:39
【问题描述】:

目标

使用 Backbone + Sprockets 在 AuthenticationView 内调用 UserModel

问题

我只是不知道这样做的好方法。

场景

这是我的看法 (assets/js/views/AuthenticationView.js):

var AuthenticationView = Backbone.View.extend({
    el: $('.authentication-form'),
    events: {
        'keyup input[name=email]'       : 'validationScope',
        'keyup input[name=password]'    : 'validationScope',
        'submit form[data-remote=true]' : 'authenticate'
    },
    render: function() {
    },
    authenticate: function() {
        // Here I'm going interact with the model. 
    }
});

这就是我的模型 (assets/js/models/UserModel.js):

var UserModel = Backbone.Model.extend({
    url: '/sessions'
});

问题

如何在视图和模型之间进行交互?

记住:它们位于不同的文件中。

【问题讨论】:

    标签: javascript ruby-on-rails backbone.js sprockets


    【解决方案1】:

    将构造函数放在一起将是第 1 步——单独的文件无关紧要,您可以使用 Browserify/requirejs 或者只是将这些东西放在全局范围内。从那里开始,由于将对象传递给属性名称为“模型”的视图构造函数,因此会自动将值分配给视图的this.model。所以如果我们的视图中有一个initialize 方法,我们可以看到:

    initialize: function (options) {
      console.log(this.model); // User instance
      this.model.on('update', function () {});
    }
    

    因此我们可以通过对象的model 属性将实例化模型传入视图:

    var model = new UserModel(); 
    var view = new AuthenticationView({ model: model });
    

    【讨论】:

      【解决方案2】:

      http://www.joezimjs.com/javascript/lazy-loading-javascript-with-requirejs/ 这是一篇关于 js 模块延迟加载的精彩文章,其中包含使用了主干js 和 requirejs 的示例

      【讨论】:

        猜你喜欢
        • 2012-07-10
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-30
        • 2014-07-31
        • 1970-01-01
        相关资源
        最近更新 更多