JSViews:如何使数据链接辅助函数正确更新

时间:2014-02-21 15:19:36

标签: jsfiddle jsviews

我很难弄清楚如何对这种情况进行数据链接以及多次寻求帮助的想法,但最后我解决了我的问题,只有一小部分我找不到解决方案。

我开始用JsFiddle来测试它: http://jsfiddle.net/ClaudeVernier/U3dZ8/

// based on Sample: data-linking to <select>... and much more...
// http://www.jsviews.com/#jsvplaying

在这种情况下,我有两个名单,“人”和“关系”(或这些人与我的关系)。

然后,我想建立一个跨度和下拉列表,其中跨度显示下拉列表的当前值并仅显示跨度或仅显示下拉列表,具体取决于用户是否为编辑模式。

显示完整列表的模板和编辑模式复选框基于页面的全局模型,而页面的下半部分是从为数组内的每个项目呈现的模板呈现的。

要将跨度和下拉列表的可见性链接到复选框的值,我使用了帮助程序,但它不是双向的,因此复选框不起作用。难道辅助函数不能用于数据链接吗?

如果我的实施不正确,感谢您提供任何帮助或建议。 最好的祝福, 克劳德

1 个答案:

答案 0 :(得分:1)

您的助手 - ~editMode()不可观察 - JsViews不知道它对model.editMode有依赖性 - 因此对model.editMode的可观察更改不会触发对{{1}的绑定的更新}}。

但是你可以声明一个依赖项,然后它将起作用:

~editMode()

这是http://jsfiddle.net/U3dZ8/5/

BTW这里的语法是,如果要在与当前数据对象不同的对象上声明路径的依赖关系,可以将任何对象传递给$.views.helpers.editMode.depends = [model, "editMode"];数组,然后传递一个或多个路径以root身份获取该对象:depends

你可以做的另一件事(对于前面没有静态确定对象或路径的情况)是提供一个函数['path.from.currentObject', otherObject, 'path1.from.otherObject', 'path2,from.otherObject' .... ]

使用具有声明的依赖项的editMode()函数(一个JsViews计算的observable)的替代方法(对于您的示例)将直接绑定到.depends = function() {return [listOfPaths_OrObjectsFollowedByPaths]}; - 如下所示:

model.editModedata-link="visible{:!~model.editMode}"

要做到这一点,你只需要将模型作为辅助对象传递:

data-link="visible{:~model.editMode}"

这是一个:http://jsfiddle.net/U3dZ8/6/