主干.js - 如何在模板中使用自定义模型属性
Backbone.js - How to use a custom model property in a template?
这可能是
一个非常简单的问题,但我正在寻找答案。
使用骨干,我有这样一句话:
Person = Backbone.Model.extend();
然后,我在从 URL 填充的集合中使用它。为了这个例子,假设我有一个名字和姓氏,我想做这样的事情:
Person = Backbone.Model.extend({
FullName: this.get("firstName") + " " + this.get("lastName")
});
例如,我可以在主干内部调用它,例如People.first()。全名()。但是,如果我将People.first()传递给我的视图并在模板中呈现,它似乎不知道FullName是什么。
如何将自定义属性添加到 Backbone 中的模型并在模板中使用它?
干杯!
你的FullName
定义没有任何意义,所以我假设你真的是这个意思:
Person = Backbone.Model.extend({
FullName: function() {
return this.get("firstName") + " " + this.get("lastName");
}
});
通常,您将在模型上调用 toJSON
以序列化它们以供模板使用:
var html = template({ person: person.toJSON() })
默认toJSON
仅返回模型内部属性的(浅表)副本。据推测,这些属性将同时具有firstName
属性和lastName
属性,但FullName
是模型上的函数,因此它不会在属性中。
您可以提供自己的toJSON
:
toJSON: function() {
var j = _(this.attributes).clone();
j.FullName = this.FullName();
return j;
}
然后你的模板中就会有一个FullName
。但是,toJSON
也用于序列化模型以将数据发送到服务器;您的服务器最终会看到一个FullName
,它可能会对此感到不安。您可以专门为模板添加另一个序列化程序:
// `serialize` is another common name for this
for_template: function() {
var j = this.toJSON();
j.FullName = this.FullName();
return j;
}
然后使用该函数为模板提供数据:
var html = template({ person: person.for_template() });
我也为此
挣扎了一段时间,但我找到了解决方案。
它涵盖了相当多的深度,包括用于发送服务器数据的toJSON问题的解决方案,在主干计算属性中
var Person = Backbone.Model.extend({
parse: function (model) {
model.FullName = model.FirstName + ' ' + model.LastName;
return model;
}
});
有一个更简单的方法。 将方法包含在初始化方法中。 实例化模型时,所有方法也会实例化。
var model = Backbone.Model.extend({
initialize : function(){
this.myCustomMethod = function(){ return 'Something'; };
},
idAttribute : 'id',
urlRoot : ''
});
完全不同的解决方法:
Backbone.Model.extend({
defaults: function() {
this.set('fullName', this.fullName.bind(this))
},
fullName: function() {
return this.get('firstName') + this.get('lastName');
}
});
这是可以直接在模型上调用"全名"函数的方式
model.fullName()
或通过get
函数,允许从模板调用它:
model.get('fullName')()
相关文章:
- 设置自动分隔符的自定义属性
- 与ng attr myCustomAttribute匹配的自定义属性指令
- 获取自定义属性的值
- 如何创建自定义属性以添加if.bind
- 动态更新Angular2指令中自定义属性的值
- 使用jQuery更改输入字段的自定义属性
- 在 Javascript 生成的列表中,如何将自定义属性添加到 标记
- 设置 HTML 自定义属性与在 ID 属性中存储信息
- 是否可以在 Polymer 中的
节点上使用自定义属性以获得漂亮的 API - 为什么克隆节点排除自定义属性
- 将自定义属性添加到 vuejs 组件
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 正在设置自定义属性名称
- datalist获取选定的值和自定义属性(无事件)
- 如何使用javascript获取元素的自定义属性值
- 在jQuery方法中编写自定义属性的正确语法是什么
- 自定义属性jquery Datatables
- 使用 css() 更改自定义属性不起作用
- 使用Javascript从按钮获取自定义属性
- 有没有任何方法可以将json对象存储在HTML标记的默认/自定义属性中,比如<tr>