Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout.js:推送项目->;指定新的DOM元素_Javascript_Jquery_Dom_Knockout.js - Fatal编程技术网

Javascript Knockout.js:推送项目->;指定新的DOM元素

Javascript Knockout.js:推送项目->;指定新的DOM元素,javascript,jquery,dom,knockout.js,Javascript,Jquery,Dom,Knockout.js,我的视图中有一个人员列表,如下所示: 它们的名称不可编辑(列表通过ajax加载,我只希望新条目可编辑) 如何在函数“addPerson”中指定我的DOM元素,使我添加的DOM元素不是readonly=“readonly”,是否可以使用Knockout 谢谢-James您可以使用可写属性扩展Peron模型: function Person(name, writable) { this.name = ko.observable(name); this.writable= ko.obs

我的视图中有一个人员列表,如下所示: 它们的名称不可编辑(列表通过ajax加载,我只希望新条目可编辑)

如何在函数
“addPerson”
中指定我的DOM元素,使我添加的DOM元素不是
readonly=“readonly”
,是否可以使用Knockout


谢谢-James

您可以使用
可写属性扩展
Peron
模型:

function Person(name, writable) {
    this.name = ko.observable(name);
    this.writable= ko.observable(writable || false);
}
然后在添加人员时,将其设置为
true

self.addPerson = function() {
    self.people.push(new Person("", true));
};
在呈现HTML时:

<input data-bind="value: name, attr: { readonly: !writable() }"
       class="form-control input-sm" type="text" />


(请注意,我将绑定处理程序从
text
更改为
value

您的模型和HTML应该是分开的
AddPerson
不应显式创建DOM元素。向
Person
对象添加
readonly
布尔值,并将其绑定到DOM中的
readonly
属性。然后,当向数组中添加新的
Person
对象时,设置
readonly
boolean
false
和knockout将根据需要呈现DOM。另外,您的
addPerson
应该创建一个新的
Person
实例并将其推入数组,或者将一个新的
Person
实例作为参数。它们是分开的,只需将其放在一起以使其更小,以防堆栈溢出。谢谢你的想法,我会马上尝试一下。
function Person(name, writable) {
    this.name = ko.observable(name);
    this.writable= ko.observable(writable || false);
}
self.addPerson = function() {
    self.people.push(new Person("", true));
};
<input data-bind="value: name, attr: { readonly: !writable() }"
       class="form-control input-sm" type="text" />