我工作的脊柱应用程序用户铆钉JS代替模板引擎,到目前为止,我很高兴与铆钉绑定,我的观点是更简洁,可读性和我有清楚的关注点分离:我的控制器只照顾管理应用程序的状态,我的模型做持久性的东西,我的自定义铆钉绑定和格式化照顾格式化值和按摩的用户输入。 到现在为止还挺好。
我唯一担心的是,我使用watch.js我怀疑手表是RESPONSABLE为iPhone的性能问题,我用它不是太舒服。
在铆钉JS网站人称它具有的脊柱支撑,虽然我一直没能找到一个例子更不用说一个片段。
这既为控制器和模型作品的唯一适配器我能想出是这样的:
rivets.configure adapter:
subscribe: (obj, keypath, callback) ->
watch obj, keypath, callback
unsubscribe: (obj, keypath, callback) ->
unwatch obj, keypath, callback
read: (obj, keypath) ->
obj[keypath]
publish: (obj, keypath, value) ->
obj[keypath] = value
是否有约束力的铆钉脊柱模型和控制器更好的办法?
我一直在挣扎Object.defineProperty都无济于事。
当你在模型更改属性Spine.js不发射事件,它只激发,当你调用一个事件save()
的模型。 它也没有履行任何形式的脏跟踪,所以你没有得到update:keypath
风格事件外的开箱,它只是触发一次update
事件。
下面是使用Spine.js型号Rivets.js标准适配器。
rivets.configure
adapter:
subscribe: (obj, keypath, callback) ->
obj.bind "update", callback
unsubscribe: (obj, keypath, callback) ->
obj.unbind "update", callback
read: (obj, keypath) ->
obj[keypath]
publish: (obj, keypath, value) ->
obj[keypath] = value
使用上面的适配器,Rivets.js将更新从视图到模型去时(使用双向粘合剂,如在内存中的属性,您的模型value
或checked
),并更新视图(从模型到去-视图),只有当你调用save()
的模型。 这仅仅是如何Spine.js事件工作的一部分。
不幸的是,上述适配器将更新为模型中的每个绑定,包括绑定并没有改变性质。 另外,您也可以使用像脊柱属性,事件 ,其基本不脏跟踪,并触发额外的update:keypath
对于更改的属性样式的事件。 这将是迄今为止在DOM操作方面具有更好的性能作为我们只更新需要更新的内容。
rivets.configure
adapter:
subscribe: (obj, keypath, callback) ->
obj.bind "update:" + keypath, callback
unsubscribe: (obj, keypath, callback) ->
obj.unbind "update:" + keypath, callback
read: (obj, keypath) ->
obj[keypath]
publish: (obj, keypath, value) ->
obj[keypath] = value
正如你所看到的,这给Rivets.js更精细的方式来订阅个别属性的改变。 这里的基本想法是,现在Rivets.js将为已更改属性仅更新DOM的部分。
同样这一切,当你调用只发生save()
这实际上是一个很好的功能,因为只要你想,你可以使尽可能多的中间更改模型,然后调用save()
在最后有这些变化反映在用户界面。
我不是专家,但似乎是Watch.js正确的适配器配置文件。
但是,这可能不是你的性能问题。 试试这个链接,更多的性能提示: 如何与rivets.js深度超过一个级别绑定