Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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 将阵列推送到observableArray时出现问题_Javascript_Html_Arrays_Knockout.js - Fatal编程技术网

Javascript 将阵列推送到observableArray时出现问题

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>

我得到了一个动态表,它有两个colun和输入(mail,name)。我需要将保存的值从数据库加载到表中,并允许用户添加新的电子邮件和名称

当我触发向表中添加新行的按钮时,问题就出现了

我将以下值输入到输入中:

函数d(){if(0

这是我的html代码

            <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);
});