检查一下骨干js中是否有模型或集合

当您覆盖骨干同步时,model / collection .save()/ fetch()使用相同的骨干同步方法,那么检查Backbone.sync接收的是模型还是一组模型的最佳方法是什么?

举个例子:

Backbone.sync = function(method, model, options){
  //Model here can be both a collection or a single model so
 if(model.isModel()) // there is no isModel or isCollection method
}

我想我正在寻找一种“安全”的最佳实践,我当然可以检查某些模型或集合所具有的某些属性或方法,但它似乎有点冒失,不应该有更好的显而易见的方法吗? 而且我可能无法找到它。

谢谢!


你也可以像这样尝试instanceof

Backbone.sync = function(method, model, options) {
  if (model instanceof Backbone.Model) {
    ...
  } else if (model instanceof Backbone.Collection) {
    ...
  }
}

@ fiskers7的答案可以深入扩展:

        var Item = Backbone.Model.extend({
            className : 'Item',
            size :10
        });

        var VerySmallItem = Item.extend({
            size :0.1
        });

        var item = new Item();
        var verySmall = new VerySmallItem();

        alert("item is Model ?" + (item instanceof Backbone.Model)); //true
        alert("verySmall is Model ?" + (verySmall instanceof Backbone.Model)); //true

这同样是黑客行为,但Backbone集合有一个模型属性,而一个模型没有 - 它本身就是一个模型。

也许更安全的方法是model.toJSON()并查看结果是对象还是数组。 无论如何,您可能会在自定义的Backbone.sync中使用model.toJSON(),所以虽然这在计算上相当昂贵,但无论如何都会发生。

链接地址: http://www.djcxy.com/p/67071.html

上一篇: Check to see if something is a model or collection in backbone js

下一篇: Why there is no ConcurrentHashSet against ConcurrentHashMap