Javascript 在刷新之前不渲染客户端选择框(Breeze.js)
毫无疑问,我在这里遗漏了一些显而易见的东西。这是我创建的第一个前端应用程序 我希望有一个客户端选择框,当选择一个选项时,实体上的一个单独属性将被更新。这意味着当选择框被更改时,将调用一个函数,该函数随后将适当地更新其他属性。我遇到的问题是,当在客户端创建实体时,选择框不会呈现 图片: :页面已加载。实体不存在子实体: :单击“添加子实体”,并创建子实体。如您所见,选择框没有任何选项。使用Chrome Knockout插件,我可以看到包含应该呈现的选项的属性是正确的 :我单击“保存”,然后刷新页面。选择框正确呈现,但重要的是,填充此选择框的值与第二步相同(通过敲除chrome插件验证) HTML: 子初始值设定项:Javascript 在刷新之前不渲染客户端选择框(Breeze.js),javascript,knockout.js,breeze,Javascript,Knockout.js,Breeze,毫无疑问,我在这里遗漏了一些显而易见的东西。这是我创建的第一个前端应用程序 我希望有一个客户端选择框,当选择一个选项时,实体上的一个单独属性将被更新。这意味着当选择框被更改时,将调用一个函数,该函数随后将适当地更新其他属性。我遇到的问题是,当在客户端创建实体时,选择框不会呈现 图片: :页面已加载。实体不存在子实体: :单击“添加子实体”,并创建子实体。如您所见,选择框没有任何选项。使用Chrome Knockout插件,我可以看到包含应该呈现的选项的属性是正确的 :我单击“保存”,然后刷新页面
function childInitializer(child) {
child.propertyOne = ko.observable();
child.propertyOneOptions = ko.observableArray();
}
propertyOne和propertyOne选项正在创建breeze实体初始值设定项:
function childInitializer(child) {
child.propertyOne = ko.observable();
child.propertyOneOptions = ko.observableArray();
}
数据模型:
public class Parent
{
public Parent()
{
Children = new List<Child>();
}
[Key]
public int Id { get; set; }
public String OtherProperty { get; set; }
public IList<Child> Children { get; set; }
}
public class Child
{
[Key]
public int Id { get; set; }
public int ParentId { get; set; }
[ForeignKey("ParentId")]
public Parent Parent { get; set; }
}
到addChild方法的末尾,事情有所改进,即子选择框确实渲染,但在正确的子项下面有一个幻影子项:您不应该调用valueHasMutated。我从来没有遇到过真正需要它的情况。问题很可能是,在通知已添加实体的Knockout之前,您没有加载所有属性,而当它尝试绑定时,绑定正在中断
function addChild() {
// Don't pass a parent into createChild yet
var child = dataservice.createChild();
// After the entity is created, then assign the parent property
child().parent(parent());
console.log('Creating Child ' + child.propertyOneOptions().length);
ko.utils.arrayForEach(propertyOneValues(), function (value) {
child.propertyOneOptions.push(value);
});
console.log('Populated Child ' + child.propertyOneOptions().length);
}
这对我来说总是有效的 我在options.init和options.update ko绑定中添加了调试语句,当我点击refresh时,它们被正确调用,但当我点击add时,它们却没有被正确调用。
dataservice.createChild(parent)
看起来像什么?它是否将创建的子项添加到父项列表中?
parent().children.valueHasMutated();
function addChild() {
// Don't pass a parent into createChild yet
var child = dataservice.createChild();
// After the entity is created, then assign the parent property
child().parent(parent());
console.log('Creating Child ' + child.propertyOneOptions().length);
ko.utils.arrayForEach(propertyOneValues(), function (value) {
child.propertyOneOptions.push(value);
});
console.log('Populated Child ' + child.propertyOneOptions().length);
}