我想在添加到主幹中的集合時自動生成模型屬性。我做了一些搜索,但似乎無法找到任何有關如何正確處理客戶端生成的時間戳的信息。我的下面的例子工作。 (但可能不是在所有情況下)有沒有更好的方式與backbone.js做到這一點?下面的代碼是fiddle。在集合add()上添加時間戳和排序順序字段Backbone.js
<div id="output"></div>
//javascript
var modelMessage = Backbone.Model.extend({
levelToInt: function() {
switch (this.get('level')) {
case "error":
return 3;
break;
case "warning":
return 2;
break;
case "info":
return 1;
break;
default:
return 0;
break;
}
}
});
var collectionMessages = Backbone.Collection.extend({
model: modelMessage,
url: "#"
});
var Messages = new collectionMessages();
Messages.listenTo(Messages, "add", function (model) {
if (!model.get('addedon')) {
model.set({
addedon: new Date().getTime(),
levelcode: model.levelToInt()
});
}
$('#output').append('<div>added model:' + JSON.stringify(model.toJSON()) + '</div>');
});
Messages.add({
level: "info",
text: "Life is good."
});
setTimeout(function() {
Messages.add({
level: "warning",
text: "you have been warned..."
});
}, 1000);
setTimeout(function() {
Messages.add({
level: "error",
text: "OMG something really bad happened!",
});
}, 2000);
好像對模特屬性添加到我一個合理的方式。爲什麼要添加到集合,而不僅僅是'model.initialize'?你有一個你關心的具體情況嗎?客戶端時間戳與服務器端不同? –
我實際上想知道邏輯是否應該在模型中。我對骨幹非常陌生,所以我唯一關心的情況是我還沒有意識到的情況。 – Mikt25
我將代碼移動到模型上的init方法。 @ fbynite's現在有一個解決方案來解決這個問題。 –