【问题标题】:knockout.js, breeze and dynatree/fancytree淘汰赛.js,微风和 dynatree/fancytree
【发布时间】: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


【解决方案1】:

希望我可以为您指明大致正确的方向。

似乎 dynatree 也可以从文件中获取 JSON 以及 AJAX 请求。在这个例子中Lazy Loading,如果你查看源代码,有:

    // In real life we would call a URL on the server like this:
...
      // .. but here we use a local file instead:

将数据存储在文件中以获取数据似乎非常浪费。现在我们知道它获取的内容有点灵活,让我们看看它在哪里使用数据,也许我们可以让它使用局部变量。让我们看看它在哪里加载它

查看 dynatree 源代码,有一个与 appendAjax 关联的函数。 (我的源代码中的第 1774 行。)目前时间有点短,但我会找到它从哪里获取 JSON 以及它如何处理它。也许您可以在外面做同样的事情,或者修改ajaxOptions 的处理以使用 JSON 获取变量。

【讨论】:

  • 感谢马克的输入。我认为我的问题比我还不明白在视图模型中放置此类代码的位置更为根本。我在 durandal 论坛上得到的另一个答案建议最好的方法是在淘汰赛上使用自定义绑定处理程序,这对我来说看起来很复杂,而且,正如我所说,目前对我不起作用,所以我需要尝试更多我认为的。
猜你喜欢
  • 2013-07-29
  • 2023-03-04
  • 2023-04-05
  • 2014-01-14
  • 2014-04-11
  • 2013-09-08
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多