backbone中从model get一个object再set回去不会自动触发change

假设有backbone model m,m = {'people': {'name': 'xxx', 'age': 18}}。

然后 p = m.get('people'); p['age'] = 19; m.set('people', p);

在上面,people的age肯定得到了改变,model也调用了set,但却不会触发model的change事件。

原因是在m.get的时候得到的p是引用到m的people的,当改变p的时候,其实也同时改了m,这样再set其实是不会再次改变的。

而同时没有调用m.set也不会触发change,所以上面整个修改中值已改,但没有触发change。

解决办法是克隆一份p再修改,再set回去,或者人工trigger change。

2013年03月15日