下划线isObject()有时不起作用

时间:2012-08-26 15:35:31

标签: backbone.js underscore.js

当我使用nodeUnit为Backbone模型编写单元测试时,发生了一些奇怪的事情,问题可归纳为:

var Player = Backbone.Model.extend({});
var player = new Player({name: 'Jacky'});

然后我用:player.set('name','Scott')更新玩家名称。 但是我发现name属性根本没有更新(这个模型没有验证函数),并且有一些奇怪的属性,如:[0]:n,[1]:a,[2]:m,[3]:即

如果我将更新方法更改为player.set({name:'Scott'}),它的工作正常。

我做了一些快速调查,发现Backbone.Model.set方法依赖于Underscore.isObject()方法,后者实现为:

  _.isObject = function(obj) {
    return obj === Object(obj);
  };

我在nodeUnit测试用例中调用了isObject()方法,并且在第一种情况下它工作正常,但在后一种情况下,它不能按预期工作,例如isObject('name')将返回true而不是预期错误。

任何人都知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

您能确定使用最新版本的Backbone吗?旧版本的Backbone不支持set方法(.set(key, value))的快捷方式版本,只允许将带有属性/值对的对象作为参数。

(我相信它是在0.9中添加的)