2017-09-08 35 views
0

所以我们可以说我有一个data-bindKnockoutJS Databinds返回空字符串,同时呼吁下返回值

<p data-bind="text: toClicked.title">This should be replaced.</p> 

而且我有我的ko.observable()

toClicked : ko.observable({}) 

那么这是充满了基础的点击另一组阵列,数据类似于此:

markers : ko.observableArray([ 
    { title: 'Title', lat: 10, lng: -10, content: 'This is the relevant content' }, 
    // more objects in array 
]) 

如果我然后在控制台中调用此可观察像,如toClicked().title,我会返回Title。如果我只需拨打toClicked();,我得到如下回应:

Object { title: "Title", lat: 10, lng: -10, content: "This is the relevant content" }

但是,数据绑定里面上面,我们覆盖一无所有的段落中的文本。

有没有什么我在这里失踪,以确保它的正确绑定?所有其他observable/observableArrays都没有问题,所以我知道这是绑定处理信息的方式。任何想法或想法将不胜感激!

作为一个方面说明,我试过$root.toClicked.title$parent.toClicked.title,没有喜悦。

回答

0

你回答了你自己的问题。在控制台中,您使用了toClicked().title,但是在您的标记中,您使用了data-bind="text: toClicked.title"。当您使用简单的可观察值时,可以关闭括号,但当它是表达式时,需要括号。另见this answer

data-bind="text: toClicked().title"

下面的代码片段说明了差异。

vm = { 
 
    toClicked: ko.observable({}), 
 
    markers: ko.observableArray([{ 
 
    title: 'Title', 
 
    lat: 10, 
 
    lng: -10, 
 
    content: 'This is the relevant content' 
 
    }]), 
 
    setClicked: function() { 
 
    vm.toClicked(vm.markers()[0]); 
 
    } 
 
}; 
 

 
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 
<div>First: <p data-bind="text: toClicked.title">This should be replaced.</p></div> 
 
<div>Second: <p data-bind="text: toClicked().title">This should be replaced.</p></div> 
 
<button data-bind="click:setClicked">Set it</button>

+0

随着knockoutJS,你并不需要添加括号来调用观察到IIRC。添加在parens中,我仍然得到相同的结果。 – IkeDoud

+0

如果你想看内容,你需要添加parens。 –

+1

我已经给我的答案添加了一个片段。也许它会帮助你找到不对的地方。 –