请告诉我,视图内部数据处理的最佳做法是什么?
示例:我有一个User
模型,并且有一个字段age
。在这个领域是用户的时代。它是一个整数值 - 月数。我如何在我的模板中实现这一点:
我可以在哪里存储这个助手方法?模板内部是不正确的方式。否则我需要做一些能生成正确模型json的函数。 (不是model.toJSON())或扩展现有的JSON ......或....
这样做的最佳方式是什么?
感谢。
答案 0 :(得分:2)
它归结为在转到模板之前向json添加方法
像这样:var userModel = Backbone.Model.extend({
initialize: function(){
_.bindAll(this, 'fullname', 'toFullJSON');
},
fullname: function(){
return this.get('name') + " " + this.get('lastname');
},
toFullJSON: function(){
var json = this.toJSON();
return _.extend(json, {fullname : this.fullname()});
}
});
var user = new userModel();
user.set({name: 'John', lastname: 'Doe'});
// you will see in this console log, that the toFullJSON function returns both the toJSON properties, and your added propert(y)(ies)...
console.log(user.toFullJSON());
你可以做的另一件事是覆盖toJSON方法
像这样:var myModel = Backbone.Model.extend({
// other methods and functions go here...
toJSON: function (attr) {
var defaultJSON = Backbone.Model.prototype.toJSON.call(this, attr)
return _.extend(defaultJSON, {calculateAge : this.calculateAge()});
},
calculateAge: function(){
// here you calculate the years and what not, then return it.
}
});
第三种方法是将模型赋予模板而不是.toJSON()返回。然后你可以在你的模板中调用model.CalculateAge()。
答案 1 :(得分:1)
有两种方法。
你可以将它放在模型上,然后将模型传递给模板 - 这意味着在模板中你必须使用model.get('age')等获取属性,但它也会使它成为可以为此模型使用辅助方法。
另一个选择是拥有某种全局帮助器集合,以后可以从模板中访问helpers.verboseAge(age)
(不知道你正在使用什么模板脚本,所以它可能是it.age,这个。年龄,年龄......但你明白了。