BackboneJS:如何在单个视图中分配多个模型
BackboneJS: How to assign multiple models in a single view
如何在一个视图中调用多个模型
通常的情况是创建主干模型
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
参数中的视图。
通常模型表示当前或最终将存储在数据库某处的数据。现在,有时您想要创建一个模型来管理短暂的浏览器状态,这很好,但通常情况下,大多数读取/编辑/删除视图不会创建模型,除非这是它们的主要目的,比如"Post New Comment"表单。所以通常情况下,如果你的视图必须显示一些模型,允许它们更新和保存,它们应该在initialize
函数的options
参数中进入视图。
然而,如果你的视图真的需要这么多模型,而你的系统中没有其他东西关心它们,只要在initialize
期间创建它们,并直接将它们作为属性存储在this
(你的视图实例)上,然后就可以了。
如果你发布一个更完整的代码样本,我们可以给出具体的建议,但它看起来像如果你有一个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返回什么,但从根本上说,这些都是处理单个用户记录,可以由单个模型处理。
杂项无关提示:
-
_.bindAll(this);
//不要麻烦列出方法 -
this.model.on('reset change', this.render);
//一次绑定多个事件 - JavaScript使用camelCase而不是lower_with_underscore
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 在VanillaJS中模拟模型双向数据绑定
- 为集合分配大量的模型弹药
- 如何将动态文本框值分配给相应的模型
- 如何根据条件在输入上分配 ng 模型中的变量
- Angularjs 在构造列表中的元素中分配动态 ng 模型名称
- 如何从输入字段中获取值并将其分配给视图模型中的JavaScript对象
- 如何将不同的数据目标分配给不同的选项值,从而显示不同的模型
- 在实例化视图后将主干模型分配给视图
- 主干JS:在fetch调用中分配一个模型属性
- JointJS模型-文本属性没有被分配
- BackboneJS:如何在单个视图中分配多个模型
- 在backbone.js中为模型分配不同的模型
- 角度选择无法从ng模型分配中获取设置
- 根据条件为javascript变量分配模型值(在Razor中)
- EmberJS:通过 JQuery 或 JavaScript 分配的值未反映在模型中
- 将下拉列表中的默认选择分配给另一个模型中的模型类
- 如何将不同的ng模型值分配给从一个指令创建的多个输入字段?