2013-07-30 24 views
0

由於我不習慣於這種編程/數據管理方式,所以這很困難。knockout.js,breeze and dynatree/fancytree

我現在想要做的就是將通過微風返回的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對象,我知道這很有用。如果我使用knockout來「foreach」將它綁定到一些純html,那麼所有的數據都顯示得很好。在我看來,我所需要做的就是初始化樹div並將它傳遞給json對象......這只是我不知道該怎麼做!

我試過在這裏使用jsfiddle:http://jsfiddle.net/Ebram/UhA3m/5/,但是當自定義綁定處理程序觸發時,chrome開發人員工具會抱怨沒有「dynatree」方法的元素。它傳入一個「ul」元素,這可能是問題 - 它肯定應該傳遞到樹div,而不是ul元素?無論如何,如果任何人都可以指出我在正確的方向,我會非常感激。當我使用John Papa的SPA方法時,我還不確定我將在哪裏放置任何單獨的js初始化代碼,因爲底層viewmodel不適合我進行$(#tree).dynatree初始化打電話,是嗎?我必須承認我還沒有得到解決。

我想我正在尋找的東西是沿着「這個視圖的視圖模型完成加載和敲除綁定正在完成,初始化dynatree div並將此json對象傳遞給樹」if這在僞代碼中有意義嗎?

+0

使用fancytree作爲在MVC框架連接的視圖是肯定一個有趣的用例。我沒有淘汰賽/微風的經驗,但讓我知道是否可以幫助改進樹API。例如applyPatch()方法就是在這個基礎上創建的。 (免責聲明:我是Dyna-/Fancytree的作者) – mar10

+0

謝謝Martin。我見過嘗試把它掛了幾個人做一些有自定義綁定處理程序(http://jsfiddle.net/Ebram/UhA3m/5/)。你有沒有任何例子,dyna/fancytree是用JavaScript對象初始化的(不是json文件,內存中的對象數組)。我已經看到了一些重載已完成但未初始化的示例。有可能嗎?請注意,mvvm方法並不真正適用於直接使用javascripting,這就是爲什麼人們試圖使用我鏈接到的jsfiddle中顯示的自定義綁定處理程序方法。 – TheMook

+1

tree.reload()接受一個'source'參數,它可以是一個子節點(或一個URL,...)的數組。另外'source'init選項接受這樣的數組。 – mar10

回答

0

我可以指望你在大概正確的方向。

看來dynatree還可以從文件以及AJAX請求中獲取JSON。在這個例子中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來創建一個變量。

+0

感謝您的輸入Mark。我認爲我的問題比這個更重要,因爲我還不知道在視圖模型的哪個位置放置這樣的代碼。我在durandal論壇上得到的另一個答案建議,最好的方法是在淘汰賽上使用自定義綁定處理程序,這對我來說看起來相當複雜,而且,正如我所說的那樣,目前不適合我,所以我需要用我的想法做更多的實驗。 – TheMook