【发布时间】:2013-07-30 18:50:34
【问题描述】:
由于我不习惯这种编程/数据管理方式,因此很难理解。
我现在要做的就是将通过微风返回的 json 对象传递到 dynatree 或 fancytree。
在线存在的示例都假设树将通过“initajax”进行 ajax 调用,或者需要一些奇怪的、复杂的自定义绑定处理程序来传递各种对象:
ko.bindingHandlers.dynatree = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
setTimeout(function () {
$(element).dynatree({
noLink: true, // noLink is required to 'unlock' the checkboxes
minExpandLevel: 2
})
// the timeout value shows the correct knockout bindings BEFORE dynatree kicks in.
}, 1000);
}
}
这一切对我来说似乎太复杂了,是吗?我已经有了 json 对象,我知道这是有效的。如果我使用敲除“foreach”将其绑定到一些普通的 html,那么所有数据都显示得很好。在我看来,我需要做的就是初始化树 div 并将 json 对象传递给它......只是我不知道该怎么做!
我在这里尝试过使用 jsfiddle:http://jsfiddle.net/Ebram/UhA3m/5/,但 chrome 开发者工具抱怨当自定义绑定处理程序触发时元素没有“dynatree”方法。它传入了一个“ul”元素,这可能是问题所在——当然它应该传入树 div,而不是 ul 元素?
无论如何,如果有人能指出我正确的方向,我将不胜感激。当我使用 John Papa 的 SPA 方法时,我也不确定将任何单独的 js 初始化代码放在哪里,因为底层视图模型不适合我进行 $(#tree).dynatree 初始化类型调用,是吗?我必须承认我还没有意识到这一点。
我想我正在寻找的只是“一旦这个视图的视图模型完成加载并且完成了敲除绑定,初始化 dynatree div 并将这个 json 对象传递给树”如果那样的话在伪代码中有意义吗?
【问题讨论】:
-
在 MVC 框架中使用 fancytree 作为连接视图肯定是一个有趣的用例。我没有淘汰赛/微风的经验,但如果可以帮助改进树 API,请告诉我。例如,applyPatch() 方法的创建就考虑到了这一点。 (免责声明:我是Dyna-/Fancytree的作者)
-
谢谢马丁。我见过的少数人尝试使用自定义绑定处理程序 (jsfiddle.net/Ebram/UhA3m/5) 将其连接起来。您是否有任何使用 javascript 对象(不是 json 文件,内存中对象数组)初始化 dyna/fancytree 的示例。我已经看到了一些重新加载完成但没有初始化的例子。有可能吗?请注意,mvvm 方法显然并不适合直接使用 javascript,这就是为什么人们正在尝试我链接到的 jsfiddle 中显示的自定义绑定处理程序方法。
-
tree.reload() 接受一个 'source' 参数,它可能是一个子节点数组(或 URL,...)。 'source' init 选项也接受这样的数组。
-
好吧,我整个周末都在这,但我无法让它工作。我正在使用上面链接到的小提琴中所示的确切代码(jsfiddle.net/Ebram/UhA3m/5),但我仍然在“$(元素).dynatree 上得到“未捕获的类型错误:对象 [对象对象] 没有方法 'dynatree'” ({" 自定义绑定处理程序中的行。我可以在 Chrome 的开发工具中看到 dynatree 脚本文件已正常加载,所以我完全不知道是什么原因造成的。我想这与 durandal 和 require.js 以及 AMD 有关我正在做的应用程序中存在的模式。
-
啊哈。进步!我忘记在我的 bundleconfig 中包含“jquery-ui ...”。现在错误已经消失,继续进行进一步的测试。 :-)
标签: javascript knockout.js breeze dynatree