铆钉和脊柱JS例子(Rivets and Spine js example)

2019-10-30 10:07发布

我工作的脊柱应用程序用户铆钉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都无济于事。

Answer 1:

当你在模型更改属性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将更新从视图到模型去时(使用双向粘合剂,如在内存中的属性,您的模型valuechecked ),并更新视图(从模型到去-视图),只有当你调用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()在最后有这些变化反映在用户界面。



Answer 2:

我不是专家,但似乎是Watch.js正确的适配器配置文件。

但是,这可能不是你的性能问题。 试试这个链接,更多的性能提示: 如何与rivets.js深度超过一个级别绑定



文章来源: Rivets and Spine js example