javascript - 在集合 add() Backbone.js 上添加时间戳和排序顺序字段

标签 javascript backbone.js

我想在添加到主干中的集合时自动生成模型属性。我做了一些搜索,但似乎找不到任何有关如何正确处理客户端生成的时间戳的信息。我的以下示例有效。 (但可能并非在所有情况下)是否有更好的方法使用backbone.js 来做到这一点? 这是fiddle对于下面的代码。

<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);

最佳答案

我只是设置模型,以便每当创建它时,都给它一个时间戳。所以我会将以下内容添加到您的模型中:

var modelMessage = Backbone.Model.extend({
  defaults: function() {
    return {
      addedon: new Date().getTime()
    };
  },
  // ... the rest of your code
});

然后将 Messages.listenTo 调用也更改为以下内容:

Messages.listenTo(Messages, "add", function (model) {
  model.set({levelcode: model.levelToInt()});
  $('#output').append('<div>added model:' + JSON.stringify(model.toJSON()) + '</div>');
});

这是一个 fiddle :http://jsfiddle.net/xUyak/

或者正如安德鲁提到的,以下内容也可以:

var modelMessage = Backbone.Model.extend({
  initialize: function() {
    this.set({
       addedon: new Date().getTime(),
       levelcode: this.levelToInt()
    });
  },
  // ... the rest of your code
});

然后你可以在 Message.listenTo 中省略 model.set:

Messages.listenTo(Messages, "add", function (model) {
  $('#output').append('<div>added model:' + JSON.stringify(model.toJSON()) + '</div>');
});

关于javascript - 在集合 add() Backbone.js 上添加时间戳和排序顺序字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839981/

相关文章:

javascript - 使用未知长度字符串拆分 JavaScript 字符串,例如\n

javascript - 为什么 0 == [],但 0 == false 和 ![] == false?

javascript - 当多个 View 共享同一模型时,主干 View 渲染期间的单个服务器调用

javascript - 离线应用程序中的 Backbone.js

javascript - 绕过iframe跨域安全

javascript - 改变元素的类别

javascript - "On shown"手动使用 Bootstrap 模式时的事件

jquery - Backbone + jquery + Java Rest 后端 model.save() 上的错误回调

javascript - 在 Marionette 布局中使用 jQuery 选项卡