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(); –