Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript BackboneJS:如何在一个视图中分配多个模型_Javascript_Backbone.js_Backbone Views_Backbone.js Collections_Backbone Model - Fatal编程技术网

Javascript BackboneJS:如何在一个视图中分配多个模型

Javascript BackboneJS:如何在一个视图中分配多个模型,javascript,backbone.js,backbone-views,backbone.js-collections,backbone-model,Javascript,Backbone.js,Backbone Views,Backbone.js Collections,Backbone Model,如何在一个视图中调用多个模型 通常的情况是创建主干模型 var myModel = Backbone.Model.extend({ url:"api/authentication"}); 然后将其指定给视图,使其成为某个视图的默认模型 var LoginView = Backbone.View.extend({ model: new myModel(), initialize: function(){ _.bindAll(this

如何在一个视图中调用多个模型

通常的情况是创建主干模型

var myModel = Backbone.Model.extend({ url:"api/authentication"});
然后将其指定给视图,使其成为某个视图的默认模型

    var LoginView = Backbone.View.extend({
        model: new myModel(),
        initialize: function(){
            _.bindAll(this, 'render', 'render_thread_summary', 'on_submit', 'on_thread_created', 'on_error');
            this.model.bind('reset', this.render); 
            this.model.bind('change', this.render); 
            this.model.bind('add', this.render_thread_summary); 
        },
        ...
    });
但是我在一个视图中有许多方法调用不同的模型。目前,我只是在事件方法中创建了一个模型实例

我想的另一个解决方案是这样的

initialize: function(){
   _.bindAll(this, 'render', 'render_thread_summary', 'on_submit', 'on_thread_created', 'on_error');
   new.model1().bind('reset', this.render); 
   new.model2().bind('change', this.render); 
   new.model3().bind('add', this.render_thread_summary); 
},
但这些是好的做法吗?还有什么其他方法可以做到这一点。谢谢

更新 作为对Peter的回应,这是我的实际代码

var userRegModel                = Backbone.Model.extend({url: fn_helper.restDomain()+'user/reg'});
var userResendActivationModel   = Backbone.Model.extend({url: fn_helper.restDomain()+'user/token/activation/new'});
var userResetPassModel1         = Backbone.Model.extend({url: fn_helper.restDomain()+'user/pwdreset/token/new'});
var userResetPassModel2         = Backbone.Model.extend({url: fn_helper.restDomain()+'user/pwdreset/change'});
var userLoginModel              = Backbone.Model.extend({url: fn_helper.restDomain()+'user/login'});

_view:  Backbone.View.extend({
                el:             'div#main-container',
                initialize:     function(){},
                events: {
                    'click #user-signup':            'signupUserFn', //userRegModel 
                    'click a#activation-resend':     'resendActivationFn',//userResendActivationModel
                    'click #reset-password-submit1': 'execResetPasswordFn', //userResetPassModel1
                    'click #reset-password-submit2': 'execResetPasswordFn', //userResetPassModel2
上面声明的每个模型对应于事件中声明的不同方法
  • 通常,模型实例应该传递给
    初始化
    方法的
    选项
    参数中的视图
  • 通常,模型表示当前或最终存储在数据库某处的数据。现在,有时您只想创建一个模型来管理短暂的浏览器状态,这很好,但常见的情况是,大多数读取/编辑/删除视图不创建模型,除非这是它们的主要用途,如“发布新注释”表单。因此,通常情况下,如果您的视图必须显示一些模型,允许对它们进行更新和保存,则它们应该出现在
    initialize
    函数的
    options
    参数中的视图中

    但是,如果您的视图确实需要这么多模型,而系统中没有任何其他模型关心它们,那么只需在
    初始化过程中创建它们,并将它们直接作为属性存储在
    这个
    (您的视图实例)上,然后退出即可

    如果您发布了一个更完整的代码示例,我们可以给出具体的建议,但实际上,如果您有一个
    LoginView
    ,并且您需要一个以上的模型,那么您可能会从设计角度出发

    部分双份

    好的,看来您认为每个API端点都需要一个模型。只需在使用
    Backbone.sync
    和相应的
    url
    选项的单个模型类上实现这些方法

    var Model = Backbone.Model.extend({
        resendActivation: function () {
            return Backbone.sync.call('update', this, {url: fn_helper.restDomain()+ 'user/token/activation/new'});
        }
    });
    
    您可能需要手动触发一些事件,我不确定您的API返回什么,但从根本上说,这些都是处理单个用户记录的,可以由单个模型处理

    其他无关提示:

    • \uu.bindAll(此)//不用麻烦列出方法
    • this.model.on('reset change',this.render')//一次绑定多个事件
    • JavaScript按绝大多数惯例使用camelCase而不是带下划线的lower_
        • 通常,模型实例应该传递给
          初始化
          方法的
          选项
          参数中的视图
        通常,模型表示当前或最终存储在数据库某处的数据。现在,有时您只想创建一个模型来管理短暂的浏览器状态,这很好,但常见的情况是,大多数读取/编辑/删除视图不创建模型,除非这是它们的主要用途,如“发布新注释”表单。因此,通常情况下,如果您的视图必须显示一些模型,允许对它们进行更新和保存,则它们应该出现在
        initialize
        函数的
        options
        参数中的视图中

        但是,如果您的视图确实需要这么多模型,而系统中没有任何其他模型关心它们,那么只需在
        初始化过程中创建它们,并将它们直接作为属性存储在
        这个
        (您的视图实例)上,然后退出即可

        如果您发布了一个更完整的代码示例,我们可以给出具体的建议,但实际上,如果您有一个
        LoginView
        ,并且您需要一个以上的模型,那么您可能会从设计角度出发

        部分双份

        好的,看来您认为每个API端点都需要一个模型。只需在使用
        Backbone.sync
        和相应的
        url
        选项的单个模型类上实现这些方法

        var Model = Backbone.Model.extend({
            resendActivation: function () {
                return Backbone.sync.call('update', this, {url: fn_helper.restDomain()+ 'user/token/activation/new'});
            }
        });
        
        您可能需要手动触发一些事件,我不确定您的API返回什么,但从根本上说,这些都是处理单个用户记录的,可以由单个模型处理

        其他无关提示:

        • \uu.bindAll(此)//不用麻烦列出方法
        • this.model.on('reset change',this.render')//一次绑定多个事件
        • JavaScript按绝大多数惯例使用camelCase而不是带下划线的lower_