在Backbone的视图中调用模型的正确方法(不使用RequireJS)

时间:2014-02-03 18:02:13

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

目标

使用Backbone + Sprockets在UserModel内拨打AuthenticationView

问题

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

场景

这是我的观点(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'
});

问题

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

请记住:它们是分开的文件。

2 个答案:

答案 0 :(得分:1)

将构造函数放在一起将是第1步 - 单独的文件无关紧要,您可以使用Browserify / requirejs或只是将这些内容放在全局范围内。从那里开始,由于将对象传递给具有属性名称“model”的视图构造函数,因此会自动将该值分配给视图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 });

答案 1 :(得分:0)

http://www.joezimjs.com/javascript/lazy-loading-javascript-with-requirejs/这里有关于js模块延迟加载的很棒的文章,其中使用了使用backbonejs和requirejs的示例