【问题标题】:Unable to Process binding无法处理绑定
【发布时间】:2015-01-22 21:50:39
【问题描述】:

我目前正在尝试使用此模型创建人员列表

{firstName: "", lastname: "", address:""}

在多值中选择。

在我的 viewModel 中,我有一个名为 selectedItem 的字段,我将其设置为 null,因为没有任何选择开始。

在我看来,我可以将 selectedItem 设置为在我的 Select 元素中选择的项目,然后我想在屏幕上显示 selectedItem 的属性,我尝试这样做的方式是

<p data-bind="text: selectedItem.firstName">First Name</p>
<p data-bind="text: selectedItem.lastName">Last Name</p>
<p data-bind="text: selectedItem.address">Address</p>

但它在控制台中这样说

Unable to process binding "text: function (){return selectedItem.firstName }"
Message: Cannot read property 'firstName' of undefined;

这会阻止所有其他绑定发生(我还有一个删除按钮)。 控制台消息似乎表明 viewModel 是在页面之后处理的或导致该效果的原因,否则它会抱怨空值对吗???如果 selectedItem 是 undefined/null 或者我尝试错误的方式,是否有忽略绑定?

编辑:here's a jsFiddle 但我注意到它的行为与我正在使用的 node-webkit 环境并没有 100% 相同,它接收列表中第一项的所有数据,但没有其他任何东西

【问题讨论】:

  • 试试这个名字:

  • 返回 Unable to process binding "text: function (){return selectedItem().firstName }" Message: undefined is not a function;
  • 您可以尝试做一个 JSfiddle 来帮助我们尽快解决您的问题吗?
  • 确定将其添加到主要问题jsfiddle.net/az80f49g

标签: knockout.js durandal


【解决方案1】:

首先,您必须将selectedItem 设置为可观察对象,以便在更改时收到通知:

self.selectedItem = ko.observable(null);

那么你需要处理selectedItem在你的绑定中为空的情况:

<div class="col-md-8">
    <p data-bind="text: selectedItem() && selectedItem().firstName">First Name</p>
    <p data-bind="text: selectedItem() && selectedItem().lastName">Last Name</p>
    <p data-bind="text: selectedItem() && selectedItem().address">Address</p>
</div>

然而,更合适的解决方案是使用with binding,它可以处理selectedItemnull 的情况,并减少重复:

<div class="col-md-8" data-bind="with: selectedItem">
    <p data-bind="text: firstName">First Name</p>
    <p data-bind="text: lastName">Last Name</p>
    <p data-bind="text: address">Address</p>
</div>

演示JSFiddle.

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2017-07-18
    • 2014-07-09
    • 2014-11-29
    • 2016-01-22
    • 2015-03-23
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多