0
我在MVC 5(KnockoutJS和TypeScript)應用程序中有一個需求,在該應用程序中,當用戶更改選項卡時,必須使用ajax加載一些局部視圖。異步部分視圖加載後敲除綁定不工作
主頁面有一個視圖模型,稍後當用戶更改標籤時,應處理局部視圖的綁定。
問題是,當我加載部分視圖,似乎綁定不起作用。
這些是功能我使用加載的局部視圖,並在頁面ViewModel類應用綁定:
class ExportViewModel
{
public isBusy: KnockoutObservable<boolean>;
private viewCache: { [key: string]: any } = {};
constructor()
{
this.isBusy = ko.observable(true);
this.getView('someId');
}
private showView(view: any): void
{
var viewContent = $('#view-content');
viewContent.html(view);
ko.applyBindings(this, viewContent[0]);
this.isBusy(false);
}
private getView(someId: string): void
{
this.isBusy(true);
var viewContent = document.getElementById('view-content');
ko.cleanNode(viewContent);
var viewName = someId;
var view = this.viewCache[viewName];
if(view)
this.showView(view);
jQuery.get(`BaseUrl/${viewName}`).done((data: any) =>
{
this.viewCache[viewName] = data;
this.showView(data);
});
}
}
樣品局部視圖是這樣的:
<div class="panel-body">
@using(Html.BeginForm())
{
<div class="row">
<div class="col-md-12">
<p>
Sample Partial View
</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<input data-bind="textInput: isBusy"/>
</div>
</div>
}
</div>
在我的情況下,輸入文本是isBusy可觀察函數的內容,不是真或假,並且如果我將輸入綁定到「textInput:isBusy()」,則值爲true這是錯誤的,因爲在applyBinding之後我將它設置爲false。
你能否確認showView方法是否被調用? 另請查看showView方法中引用的是什麼 –
showView將被調用,因爲如果我刪除了applyBinding,則根本沒有任何工作(即使函數體將顯示在輸入中)。我也相信'this'應該指向vm類實例而不是函數本身。 – mrtaikandi
我們缺少一些代碼嗎?我沒有看到isBusy = ko.observable(); –