将 jQuery UI 拖/放与backbone.js 结合使用
我的 Backbone 应用程序的一项功能涉及将类型 A 的模型与类型 B 的模型关联起来,这是通过将视图 A 拖动到视图 B 上来完成的。在 B 的视图类中,我监听 drop 事件,并从中获取视图 A 的 DOM 元素,但没有有关模型 A 的信息。
检索此信息的最佳方法是什么?到目前为止,我最好的猜测是
- 让模型 A 在应用程序的命名空间中保存对其自身的引用,如果放置处理程序尚未这样做,则在拖动结束时删除此引用,以便
- 在视图 A 上触发事件,同时传递对模型 B 的引用事件,然后让模型 A 调用模型 B 的方法...
- 将模型 A 存储为视图 A 的 $.data 属性,
但所有这些方法似乎都很复杂/不优雅。
One feature of my Backbone app involves associating models of type A with models of type B, which is done by dragging view A onto view B. In B's view class I listen for the drop event and from this I get the DOM element of view A, but no information about model A.
What's the best way to go about retrieving this information? My best guesses so far are
- have model A save a reference to itself in the app's namespace, removing this reference on drag end if the drop handler hasn't already done so
- fire an event on view A, passing a reference to model B along with the event, and then having model A call a method of model B...
- store model A as a $.data attribute of view A
but all these approaches seem convoluted/inelegant.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
作为数据属性存储实际上是相当干净的,而且性能也不会差。您可以将模型的
cid
属性作为data-cid
存储在 DOM el 上,并使用集合的getByCid
方法来检索模型。Storing as a data-attribute is actually quite clean, and the performance will not be bad. You can store the model's
cid
attribute asdata-cid
on the DOM el, and use the collection'sgetByCid
method to retrieve the model.我认为最干净的方法是像 kinakuta 在评论中提到的那样,使用 id 将 dom 元素与模型关联起来,例如 数据属性。
从实现的角度来看,这是有意义的,因为它允许您具有双向依赖关系,并且当您的应用程序变得更加复杂时,您可以轻松地引用另一个依赖项。
你提到的解决方案也可以工作,但是,我觉得解决方案 A 似乎有点黑客,解决方案 B 的代码不太干净,解决方案 C 本质上与使用数据属性相同。
I think the cleanest way to go about it is as kinakuta mentioned in a comment to associate a dom element with the model using the id in e.g. a data-attribute.
This makes sense from an implementation point of view because it allows you to have a bidirectional dependency and you can reference one from the other easily later on when your application beccomes more complex.
Your mentioned solutions would work as well, however, I feel Solution A seems a little hackish, Solution B is less clean code wise and Solution C is essentially the same as using a data-attribute.