5

我在視圖上使用了敲除js來顯示字段列表(例如,名字,姓氏等)。這些字段使用可觀察數組在列表模板中列出。該模板包含以下字段:名稱(輸入),翻譯(選擇)和添加/刪除功能。 (見下文)MVC在JQuery對話框中敲除JS

var viewModel = { 
    Fields: ko.observableArray([new Field(2, "First Name", 1), new Field(3, "Last Name", 2)]), 
    AvailableTranslations: ko.observableArray([new Translation(1, "Prefixes"), new Translation(2, "Suffixes")]), 
    remove: function(item) { 
     ko.utils.arrayRemoveItem(this.Fields, item) 
    }, 
    add: function() { 
     this.Fields.push(new Field(0, "", "")); 
    } 
}; 

var Translation = function(id, name) { 
    this.ID = id; 
    this.Name = name; 
}; 

var Field = function(id, name, translationID){ 
    this.ID = ko.observable(id); 
    this.Name = ko.observable(name); 
    this.TranslationID = ko.observable(translationID); 
}; 

接下來在模板中的翻譯選擇列表,我想可以選擇添加一個新的翻譯不存在。當按鈕被點擊時,我想打開一個包含利用挖空的局部視圖的jQuery UI對話框。部分視圖將包含翻譯名稱以及舊值和新值(兩個文本字段)。舊的和新的值是一個可觀察的數組。

var viewModelPartialDialog = { 
    TranslationName: ko.observable(), 
    Values: ko.observableArray([]), 
}; 

var Value = function(id, oldVal, newVal) { 
    this.ID = id; 
    this.OldVal = oldVal; 
    this.NewVal = newVal; 
}; 

當用戶提交部分視圖的表單時,我希望它進行保存調用以及更新AvailableTranslations可觀察數組。

任何人都可以幫助我或指出我在正確的方向來實現這一目標嗎?


感謝您的示例。這很有幫助,但不是我想要做的。在你的例子中,我無法將一個observableArray添加到產品中,然後在對話框的編輯模板中有一個嵌套的模板。回到我原來的例子,我想在viewModelA中添加新的字段,就像你有產品列表一樣。但是,我不想編輯對話框中的字段,而想打開一個對話框來添加新的翻譯。在對話框中打開的新翻譯將是一個單獨的視圖模型(viewModelB)。添加翻譯名稱和值後,對話框將異步發佈,然後更新原始視圖模型的(viewModelA)AvailableTranslations可觀察數組。

你能舉一個這個功能的例子嗎?

回答

11

這裏是你在做什麼,可能是類似的例子:http://jsfiddle.net/rniemeyer/WpnTU/

它設置對話框的頁面加載時,但不會打開它。然後,有一個自定義綁定處理程序,只要「selectedItem」observable被填充(可能與現有項目或新項目),就會被調用。

簡單的自定義綁定的處理程序是這樣的:

//custom binding handler that opens the jQuery dialog, if the selectedProduct is populated 
ko.bindingHandlers.openDialog = { 
    update: function(element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     if (value) { 
      $(element).dialog("open"); 
     } 
    } 
} 
+0

很好的例子。我還需要知道什麼時候關閉事件觸發,所以我爲此添加了綁定。http://jsfiddle.net/WpnTU/25/ – Anders

+0

Anders,onclose警報使用Chrome瀏覽器觸發兩次。它發生在你身上嗎? –