2

当我使用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]: e.

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

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

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

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

有人知道是什么原因造成的吗?

4

1 回答 1

1

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

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

于 2012-08-26T19:05:34.673 回答