正确处理Backbone视图模板内部数据的方法

时间:2012-02-05 23:02:53

标签: backbone.js

请告诉我,视图内部数据处理的最佳做法是什么?

示例:我有一个User模型,并且有一个字段age。在这个领域是用户的时代。它是一个整数值 - 月数。我如何在我的模板中实现这一点:

  • 17 => 1年5个月
  • 11 => 11个月
  • 24 => 2年

我可以在哪里存储这个助手方法?模板内部是不正确的方式。否则我需要做一些能生成正确模型json的函数。 (不是model.toJSON())或扩展现有的JSON ......或....

这样做的最佳方式是什么?

感谢。

2 个答案:

答案 0 :(得分:2)

几个月前,我回答了一个类似的问题: 在这个问题backbone toJSON with helper methods

中找到它

它归结为在转到模板之前向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,这个。年龄,年龄......但你明白了。