2014-02-21 102 views
0

我有一個很難搞清楚如何將數據鏈接這種情況下,並要求幫助一些時間,但最後我解決了我的問題必須的思想,只有一個小部分我找不到解決方案。JSViews:如何使數據鏈接輔助函數更新正確

我開始的jsfiddle來測試它: http://jsfiddle.net/ClaudeVernier/U3dZ8/

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

在這種情況下,我有兩個表,「人」和「關係」(或這些人如何與我)。

然後,我想要構建一個範圍和下拉列表,其中範圍顯示下拉菜單的當前值並僅顯示範圍或僅顯示下拉菜單,具體取決於用戶是否處於編輯模式。

模板什麼顯示了完整的列表和編輯模式複選框,而頁面的下部從呈現一個數組內的每個項目模板渲染是基於網頁的全球模式。

到跨度和下拉菜單的可見性鏈接到複選框的值,我用了一個幫手,但它不是雙向所以複選框不工作。是否輔助函數不能用於數據鏈接?

感謝您的任何幫助或建議,如果我的實現是不正確的。 最好的問候, 克勞德

回答

1

你的幫手 - ~editMode()是無法觀測 - JsViews不知道它有model.editMode依賴 - 所以model.editMode觀察到的變化不會對綁定觸發更新~editMode()

但是你可以聲明的依賴關係,然後它會工作:

$.views.helpers.editMode.depends = [model, "editMode"];

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

順便說一句,這裏的語法是,如果你想聲明一個不同於當前數據對象的對象上的路徑的依賴關係,你可以傳入任何對象的depends數組,然後是一個或多個路徑獲取該對象作爲根:['path.from.currentObject', otherObject, 'path1.from.otherObject', 'path2,from.otherObject' .... ]

你可以做(​​針對某些物體或路徑不是靜態確定了前面的情況下)的另一件事是提供一個功能.depends = function() {return [listOfPaths_OrObjectsFollowedByPaths]};

的替代(你的樣品)使用編輯模式()函數聲明依賴性(JsViews計算可觀察性)是直接綁定到model.editMode - 如:

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

要做到這一點,你只需要在模型中傳遞作爲幫助對象:

jsDropDownsTemplate.link("#myDropDowns", model.myRelations, {model: model});

這裏是一個:http://jsfiddle.net/U3dZ8/6/