我正在编程一个CMS,它允许以所见即所得的方式在网站上创建和编辑元素(内容块(。基本上,当登录时,您可以在视觉上看到相同的网站,但悬停并单击元素会显示编辑器(如Aloha(或其他控件。
例如:
- 将段落悬停将显示侧面的小菜单在左侧、中间和右对齐
- 点击一个段落可以进行编辑
- 悬停在图像上会在图像右侧显示一个点,可以拖动该点,从而更改图像的宽度(高度会按比例更新(
- 在网站中悬停任何一个块都会弹出一个"+"按钮,允许在悬停的块之前创建另一个块
- 等等
我目前的策略是使用我在Nike Better World上看到并一直使用的类似技术:有一个实例化javascript,它在每个具有数据控制器属性的html元素上调用jquery插件,插件的名称由数据控制器属性指定。
稍微扩展一下这个概念,我会使用它将各种控件附加到内容块。
但是,作为一个新手,直到最近我才发现像backbone.js这样的javascript mvc框架。我一直在服务器端(在Kohana(使用mvc,但从未使用过javascript。我似乎可以使用它,但我不清楚该采取什么策略。我正在开发的CMS是一种介于适当的javascript应用程序和老式html网站之间的混合。我不明白,如果内容块已经加载在页面html中,我怎么能使用backbone.js的内容块集合对象(用javascript加载它们对我来说没有意义(。
有人有什么建议吗?
快速答案:
ContentModel:它是您想要编辑的数据项。实际内容。例如:$(#mydiv).text();
DisplayView:将显示此数据的视图(这是ContentModel首次用$('#mydiv).text()
实例化和初始化的地方
EditView:"编辑"此数据的视图(可能是文本区域(-创建时,使用ContentModel(同一模型对象(初始化
EditTemplate:编辑框应该是什么样子的对应html(可以使用_.template(...)
填充和创建,即文本区域/框等,
现在DisplayView在初始化时保持文本的当前值(在它的模型中(。如果您在这个视图上有一个"编辑"按钮/链接(例如div块(,单击它会创建一个新的EditView,并"隐藏"当前显示文本的div(#mydiv(,并在其位置显示加载了模型数据的EditView($.append()
是您最好的朋友(。
单击cancel,只需隐藏/删除EditView并显示回底层div。如果您更新,成功后(从服务器(只需隐藏EditView并在DisplayView上显示数据!DisplayView可以订阅模型的"更改"事件!因此,一旦模型发生变化,视图就知道该怎么办了!!
希望这能有所帮助!