モデルのフィールドで前処理を行う良い方法は何ですか。たとえば、次のデータがあるとします。
[{
id: '1',
sender: 'me',
receiver: 'you',
message: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum",
date: new Date("October 13, 1975 11:13:00").toLocaleDateString()
}]
この単純なモデルでは:
App.Models.Notification = Backbone.Model.extend({
defaults: {
'date': new Date()
}
});
message
そして、ビューに表示するためにの値の文字数を減らしたいのですが、そのメッセージに指定された数以上の文字が含まれている場合に限ります。多分このようなもの:
if ( this.model.get('message').trim().split(" ").length > 30 ) {
// code here
}
そのため、すべてのモデルでその前処理を実行したくありません。私は私の考えでそれをするべきですか?もしそうなら、どのように?いくつかの解決策を読みましたが、この状況には当てはまらないものもあれば、ハックのように見えるものもあります。
ありがとう!
アップデート
Alex の提案に従い、参考として、Handlebars のテンプレート ヘルパーの使用例をここに示します。
render: function() {
Handlebars.registerHelper('getShort', function(options) {
if ( options.fn(this).trim().split(" ").length > 30 ) {
var message = options.fn(this);
var shortText = $('<div/>', { text: message })
.html()
.trim()
.substring(0, 200)
.split(" ")
.slice(0, -1)
.join(" ") + "..."
return shortText;
}
return options.fn(this);
});
template = Handlebars.compile( $("#my-template").html() );
this.$el.html( template( this.model.toJSON() ));
return this;
}
そしてそれを次のように使用します:
index.html
{{#getShort}}{{message}}{{/getShort}}