Javascript 将阵列推送到observableArray时出现问题
我得到了一个动态表,它有两个colun和输入(mail,name)。我需要将保存的值从数据库加载到表中,并允许用户添加新的电子邮件和名称 当我触发向表中添加新行的按钮时,问题就出现了 我将以下值输入到输入中: 函数d(){if(0 这是我的html代码Javascript 将阵列推送到observableArray时出现问题,javascript,html,arrays,knockout.js,Javascript,Html,Arrays,Knockout.js,我得到了一个动态表,它有两个colun和输入(mail,name)。我需要将保存的值从数据库加载到表中,并允许用户添加新的电子邮件和名称 当我触发向表中添加新行的按钮时,问题就出现了 我将以下值输入到输入中: 函数d(){if(0 这是我的html代码 <table class="table" data-bind="visible: emails().length"> <thead>
<table class="table" data-bind="visible: emails().length">
<thead>
<tr>
<th>Email</th>
<th>Nome</th>
<th></th>
</tr>
</thead>
<tbody data-bind="foreach: emails">
<tr>
<td>
<input type="text" name="contatoMail" data-bind="value: contatoMail" />
</td>
<td>
<input type="text" name="contatoNome" data-bind="value: contatoNome" />
</td>
<td>
<button type="button" class="btn btn-link" data-bind="click: $parent.remover">Remover</button>
</td>
</tr>
</tbody>
</table>
<div class="control-group">
<label class="control-label" for="#"></label>
<div class="controls">
<button type="button" class="btn btn-primary" data-bind="click: adicionar">
Adicionar E-mail
</button>
</div>
</div>
<div class="control-group">
<label class="control-label" for="#"></label>
<div class="controls">
<button type="button" class="btn btn-primary" data-bind="disable: possuiItem">
Enviar e-mail(s)
</button>
</div>
</div>
}当我将ko.applyBindings(vm)放入DOM就绪处理程序时,我解决了这个问题:
说明:
我们必须等待加载了ko.applyBindings调用的DOM
从KO.js文档中:
要激活敲除,请将以下行添加到块:
应用绑定(myViewModel)
您可以将脚本块放在HTML的底部
文档,或者您可以将其放在顶部,并将内容包装在
DOM就绪处理程序,如jQuery的$函数
我看不出有错误。检查这个
function Projeto(opt_data) {
var data = opt_data || {};
var self = this;
self.idProjeto = ko.observable(data.idProjeto);
self.possuiItem = ko.observable(true);
self.emails = ko.observableArray([]);
for (var i = 0; i < data.emails.length; i++) {
var email = new Email(data.emails[i]);
self.emails.push(email);
self.possuiItem(false);
}
self.adicionar = function () {
var email = new Email();
self.emails.push(email);
self.possuiItem(false);
};
self.remover = function (email) {
self.emails.remove(email);
if (self.emails().length == 0) {
self.possuiItem(true);
}
};
}
function Email(opt_data) {
var data = opt_data || {};
console.log(data);
var self = this;
self.contatoMail = ko.observable(data.contatoMail || "");
self.contatoNome = ko.observable(data.contatoNome || "");
}
var data = $.parseJSON($('#model').html());
var vm = new Projeto(data);
ko.applyBindings(vm);
{
"idProjeto": 1333,
"emails": [{
"idProjeto": 1333,
"idModelo": 1,
"contatoMail": "caique.romero@sou.com.br",
"contatoNome": "Caique Romero"
}]
$(document).ready(function () {
function Projeto(opt_data) {...}
function Email(opt_data) {...}
var data = $.parseJSON($('#model').html());
var vm = new Projeto(data);
ko.applyBindings(vm);
});