未捕获错误:无法解析绑定;消息:ReferenceError:未定义xxx;

时间:2014-05-28 14:52:37

标签: c# asp.net-mvc knockout.js

这是我第一次使用Knockout.js。

我不明白为什么会遇到这个问题。

未捕获错误:无法解析绑定。 消息:ReferenceError:未定义DataPrevista; 绑定值:值:DataPrevista,namePath:true

我希望有人帮助我。

这是我的代码:

查看

                    <div>
                        @Html.LabelFor(model => model.Cliente)
                    </div>
                    <div>
                        @Html.DropDownListFor(model => model.Cliente.Codigo, new SelectList(Model.ClientesSelecionaveis, "Value", "Text", Model.Cliente), new { @class = "form-control" })
                    </div>
                    <div>
                        @Html.LabelFor(model => model.Funcionario)
                    </div>
                    <div>
                        @Html.DropDownListFor(model => model.Funcionario.Codigo, new SelectList(Model.FuncionariosSelecionaveis, "Value", "Text", Model.Cliente), new { @class = "form-control" })
                    </div>
                    <fieldset>
                        <div style="margin:30px 0;">
                            <input type="button" value="Adicionar Agendamento" data-bind="click: addAgendamento" class="btn btn-success" />
                            <input type="button" value="Remover Agendamento" data-bind="click: removeAgendamento" class="btn btn-danger" />
                        </div>
                        <h4 class="page-header">Agendamentos</h4>
                        @Html.EditorFor(model => model.Agendamentos)
                    </fieldset>
                    <p style="margin:30px 0;">
                        <input type="submit" value="Enviar" class="btn btn-info" />
                        @Html.ActionLink("Listar", "Index")
                    </p>

编辑模板

<div>
@Html.LabelFor(model => model.DataPrevista)
</div> 
   <div>
     @Html.TextBoxFor(model => model.DataPrevista, new { @class = "form-control", data_bind = "value: dataPrevista, namePath: true" })
 </div>

  <div>
       @Html.LabelFor(model => model.InicioPrevisto)
    </div>
   <div>
           @Html.TextBoxFor(model => model.InicioPrevisto, new { @class = "form-control", data_bind = "value: inicioPrevisto, namePath: true" })
     </div>

   <div>
    @Html.LabelFor(model => model.FimPrevisto)
   </div>
   <div>
    @Html.TextBoxFor(model => model.FimPrevisto, new { @class = "form-control",      data_bind = "value: fimPrevisto, namePath: true" })
   </div>

  <div>
       @Html.LabelFor(model => model.TrasladoPrevisto)
  </div>
   <div>
@ Html.TextBoxFor(model => model.TrasladoPrevisto, new { @class = "form-control", data_bind = "value: trasladoPrevisto, namePath: true" })

的Javascript

<script type="text/javascript" language="javascript">
function createViewModel() {

    var createAgendamento = function () {
        return {
            dataPrevista: ko.observable(),
            inicioPrevisto: ko.observable(),
            fimPrevisto: ko.observable(),
            trasladoPrevisto: ko.observable()
        };
    };

    var addAgendamento = function () {
        agendamentos.push(createAgendamento());
    };

    var removeAgendamento = function () {
        agendamentos.pop();
    };

    var cliente = ko.observable();
    var funcionario = ko.observable();
    var agendamentos = ko.observableArray([createAgendamento()]);

    return {
        cliente: cliente,
        funcionario: funcionario,
        agendamentos: agendamentos,
        addAgendamento: addAgendamento,
        removeAgendamento: removeAgendamento
    };
}


$(document).ready(function () {
    var viewModel = createViewModel();
    ko.applyBindings(viewModel);
});

1 个答案:

答案 0 :(得分:1)

您的数据语法似乎不正确。它应该是data-bind而不是data_bind

请参阅Knockout文档:binding syntax

此外,dataPrevista是视图模型中的嵌套observable,因此您需要像这样引用它。

data-bind="value: agendamentos.dataPrevista"