设置了ko.applybinding后,html不会刷新。这只发生在我的选择选项对象上。
public ProjectleaderList: KnockoutObservableArray<string> = ko.observableArray([]);
public AccountmanagerList: KnockoutObservableArray<string> = ko.observableArray([]);
public OrganisationcontactList: KnockoutObservableArray<string> = ko.observableArray([]);
function(records) {
let records = result.Records;
switch (result.Message) {
case "AccountManager":
OrderPage.Instance().AccountmanagerList = ko.observableArray(records);
OrderPage.Instance().Order.AccountManagerName = OrderPage.Instance().GetInitialListValue(OrderPage.Instance().Order.AccountManagerModelId, records);
break;
case "Organisationcontact":
OrderPage.Instance().OrganisationcontactList = ko.observableArray(records);
OrderPage.Instance().Order.OrganisationcontactName = OrderPage.Instance().GetInitialListValue(OrderPage.Instance().Order.OrganisationcontactModelId, records);
break;
case "Projectleader":
OrderPage.Instance().ProjectleaderList = ko.observableArray( records);
OrderPage.Instance().Order.ProjectLeaderName = OrderPage.Instance().GetInitialListValue(OrderPage.Instance().Order.ProjectLeaderModelId, records);
break;
default:
}
}
ViewModel:
public ViewModel() {
this.Order = OrderPage.Instance().Order;
this.AccountmanagerList = OrderPage.Instance().AccountmanagerList;
this.ProjectleaderList = OrderPage.Instance().ProjectleaderList;
this.OrganisationcontactList = OrderPage.Instance().OrganisationcontactList;
}
如果服务器足够快,则下拉选择将被填充,但是如果它们在ko.applybinding发生之后发生,则不会填充列表。数组在“监视”中被视为可观察到的数组。所以我不知道发生了什么。
答案 0 :(得分:0)
您似乎应该设置可观察数组的值,而不是将其设置为可观察数组的新实例(假设您在首次创建实例时将其初始化为空数组)。
例如
case "AccountManager":
OrderPage.Instance().AccountmanagerList(records);
OrderPage.Instance().Order.AccountManagerName = OrderPage.Instance().GetInitialListValue(OrderPage.Instance().Order.AccountManagerModelId, records);
break;
在应用绑定时,您的列表将绑定到obs数组的原始实例-这不会改变。
作为对评论的答复-有关所有这些文档,请参见基因敲除js网站(非常全面)。
要稍微扩展一下正在发生的事情,请想象用服务器端语言进行相同的操作:
class Foo {
public Bar X { get; set;}
ctor() {
X = new Bar();
}
}
var myFoo = new Foo();
var aBar = myFoo.X;
myFoo.X = new Bar();
bool match = aBar == myFoo.X; //False
您正在绑定到可观察数组的初始实例(即,在调用applyBindings时在视图模型上的实例)。如果您更改了事实,则在视图模型上更改实例后,绑定不会更新,但是您的前端仍然绑定到可观察数组的初始实例。