2016-04-04 71 views
0

我有一個從ComboBox和多選的數據獲取頁面的樹視圖。 ComboBox包含每種成分的名稱,而multiselect包含可能的數量類型,然後將其用作所有子節點的名稱。Kendo UI TreeView:只添加視圖中不存在的節點

樹看起來就像這樣:

  • 成分1
    • 100毫克
    • 200毫克
  • 成分2
    • 50毫克
    • 100毫克

一切正常,只是因爲我無法驗證,如果一個節點已經存在,我可以添加相同值的兩倍。

這裏是我用添加新元素的功能:

var addElement = function() { 

    var treeview = $("#ingredientTree").data("kendoTreeView"); 
    var multiselect = $("#ingredientAmount").data("kendoMultiSelect"); 
    var ingredientToAdd= $("#ingredient").val(); 

    // I allways get an empty array at this point. 
    var exinstingIngredient= treeview.findByText(ingredientToAdd); 

    var children = new Array(); 
    var amount = multiselect.value(); 

    for (var j = 0; j < amount.length; j++) { 

     children.push({ text: amount[j] }); 
    } 

    // it allways adds the items because the length is allways 0 
    if (exinstingIngredient.length === 0) { 
     treeview.append({ 
      text: ingredientToAdd, 
      items: children 
     }); 
    } 
} 

我不明白爲什麼它不能找到現有的元素,即使我設置它的名稱作爲文本和搜索這個文本。

編輯:

我們這裏有樹視圖:

@(Html.Kendo().TreeView().TemplateId("treeview-template").Name("ingredientTree")) 

這是材料的來源,它處理只是簡單的字符串:

@(Html.Kendo().ComboBox() 
    .Name("ingredient") 
    .DataSource(source => source.Read(r => r.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "InternationalIngredients" })))) 
    .Events(events => events.Change("onIngredientChanged")) 
) 

以下,可以找到源用於處理字符串的金額:

​​

這是確定的服務電話選擇成分的功能:

function getIngredient() { 
    return { ingredient: $("#ingredient").val() } 
} 
+0

你可以發佈treeview和數據源代碼嗎? –

回答

0

我發現我的問題的原因了。 findByText似乎用類「k-in」檢查節點的內容。不幸的是,當您按照here的描述添加模板時,此內容會被修改。所以如果你想找到一個帶有模板的元素,你應該使用findById或者你可以使用jQuery來定義你的模板。

相關問題