我有一個使用KnockoutJS的ASP.NET MVC4 SPA web應用程序,這有點尷尬,因爲據我瞭解,當頁面最初加載到SPA時通常沒有數據直到AJAX調用檢索它。當我嘗試使用像data-bind="with: myData"
這樣的屬性綁定塊中的各種數據時,該節點內的整個DOM被清空,直到myData變爲有效,這讓我感到緊張,如果某些腳本可能依靠這些元素可用於附加腳本到或某物。頁面塊在加載過程中消失並重新出現也很糟糕。所以,我設計了with
結合,以防止後代綁定,如果該值爲空,目前看起來像這樣的變化:KnockoutJS「與」綁定在模型可用之前
ko.bindingHandlers.safeWith = {
'init': ko.bindingHandlers.with.init,
'update': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var value = ko.utils.unwrapObservable(valueAccessor());
if ((value != undefined) && (value != null))
ko.bindingHandlers.with.update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
}
};
然後,我只是用safeWith
而不是with
,以確保我沒有按DOM」在等待myData
被填充時不會消失。
我的問題是:
- 這是利用基因敲除SPA的一個共同的問題,如果是這樣,它是如何正常處理?
- 我處理這個安全問題的方式或者是否有我以某種方式應用重複事件/綁定的風險或我不知道的一些風險?
- 我很驚訝我在漫遊有關網絡學習淘汰賽和相關技術,我沒有跑過這個。 傾向於有充分的理由讓DOM的部分在它們綁定到的對象爲空時消失;我是否試圖保持它的錯誤?
如果您搜索''with''的knockout JS文件(包括引號),您將看到它是通過調用'makeWithIfBinding'創建的。 ''with''只在我的knockout.js版本中出現過一次('knockout-2.2.0.debug.js')。我知道想要移除不適用的DOM部分,但是您是否也必須處理尚未加載模型的DOM的某些部分,但是當頁面加載完成時它會被加載?在這些情況下你會遇到這個問題嗎? – BlueMonkMN
偶爾遇到它,但我通常在完成加載數據之前避免顯示視圖。你使用單頁面應用程序還是多頁面? –
我正在對一個應用程序進行原型設計,我期望每個主要功能都是一個小型SPA。在頁面中加載新記錄將使用AJAX調用來檢索新數據,而不是重新加載整個頁面,但導航到另一個函數將加載一個全新的頁面。 – BlueMonkMN