骨干模型视图:在编辑(通过表单)和显示之间切换

时间:2012-08-12 21:44:22

标签: forms view backbone.js

使用Backbone,我为模型创建了一个视图。我想向用户提供以下工作流程: a)最初,模型内容仅通过模板显示,并且有一个编辑按钮 b)如果用户单击编辑按钮,模型内容将以表格形式显示,并可通过单击保存按钮保存回模型。 c1)如果保存成功,我们将通过模板重新呈现新模型内容并再次显示 c2)如果有任何验证错误,表单会更新错误。

我想出了如何实现这一点的以下选项。但我不确定最佳做法。任何建议都非常受欢迎。

选项1 :2个子视图(一个用于显示内容,一个用于编辑它),它们在显示和编辑之间的任何切换上动态创建(并在之后删除)。

选项2 :在任何开关上隐藏/取消隐藏的2个子视图(一个用于显示内容,一个用于编辑它)(如切换)

选项3 :在任何交换机上分配给父元素的2个子视图(一个用于显示内容,一个用于编辑它)。

选项4 :1用于管理模型内容的视图和在显示和编辑之间的任何切换上呈现的2个模板(一个用于显示,一个用于编辑)。

从我的直觉来看,我显然更喜欢选项4,因为它需要一个可以处理所有逻辑的视图。但也许我已经在性能,事件处理,DOM访问等方面进行了监督。因此,对于4个选项的优缺点的任何有力论据都受到高度赞赏。 你觉得怎么样?

2 个答案:

答案 0 :(得分:2)

我一直在做类似的事情,除了编辑按钮不是附加到整个模型,而是附加到个别属性,可以“就地”编辑。为此,我一直在使用backbone-forms,用骨干表单替换要编辑的元素,然后在提交表单后重新呈现它。这很有效。

在您的情况下,由于您一次编辑整个模型,实际上会更容易。当用户单击编辑按钮时,使用主干表单替换视图,并在他们提交时使用错误或成功消息重新呈现模型视图。 Backbone表单使得在表单上显示错误消息非常容易。

答案 1 :(得分:2)

我尝试过选项3(2个子视图)和选项4(使用2个模板的1个视图)。

以下是3的参数:

Switching between readonly view and edit view in backbone js

以下是“将联系人切换到编辑模式”下的文章4:

http://net.tutsplus.com/tutorials/javascript-ajax/build-a-contacts-manager-using-backbone-js-part-4/


我发现选项3更麻烦,因为现在你有3个视图使用相同的模型。它会在DOM中出现问题,因为现在有一个el用于父项,el用于每个子项,嵌套在内部。它还会带来封装问题,因为子视图应该真正从父级继承而来,但是使用javascript很难:

Access parent class member with javascript inheritance?

我希望选项3的工作方式更像是与DOM中的el绑定的抽象基类。然后查看和编辑可以从它继承并在内部设置el,防止嵌套两个el。但是这破坏了backbone.js如何嵌套观点:

Swap/switch/exchange backbone.js views in place?


选项4“刚刚工作”我第一次尝试它。如果View.editing为true,则可以使用editTemplate进行渲染。实际上,只读视图往往很小,按定义交互很少,只能通过几行添加到编辑视图中。

4的缺点是你用切换逻辑弄脏你的视图。

4的论点是它增加了重用代码和强化DRY的可能性。

4的最后一个参数是,您可能在某个点始终处于“丰富”状态,并且您可能只想在特定表单元素上启用编辑。例如,Contact表单里面可能有一个Address视图,用于处理自己的更新。因此,观看/编辑可能不会在路上互相排斥。


我终于辞去了自己的工作(选项4),因为两个选项都在html文件中使用了两个模板。 backbone.js实现细节对最终用户无关紧要。

我认为这些都值得一些冗长的文章来衡量每种方法的优缺点,并附有现实世界的例子。 Backbone.js还需要内置骨干关系,可能还有Backbone.ModelBinder,它有更好的._super实现。如果其中一些概念更加充实,那么就可以更容易地实现选项3恕我直言。

但是我很好奇其他人的想法,因为3或4都不像现在这样完美,我想知道最佳实践是什么,因为表格处理是人们的主要原因之一首先进入backbone.js。