有人能用Knockout.JS风格的绑定澄清以下情况吗?
如果我使用Width()、Height()之类的函数,那么绑定是成功的,但是当我使用没有()的属性时,绑定就不成功了。对于attr绑定,我不必使用()。
成功的attr和样式绑定:
<div class="container" id="container" data-bind="foreach: Nodes">
<div class="node" data-bind="attr:{id:Id}, style: {width: Width() + 'px', height: Height() + 'px', left: PositionLeft() + 'px', top: PositionTop() + 'px'}">
<span data-bind="text:Name"></span> <div class="ep"></div>
</div>
应用attr绑定,但样式绑定不成功
<div class="container" id="container" data-bind="foreach: Nodes">
<div class="node" data-bind="attr:{id:Id}, style: {width: Width + 'px', height: Height + 'px', left: PositionLeft + 'px', top: PositionTop + 'px'}">
<span data-bind="text:Name"></span> <div class="ep"></div>
</div>
发布于 2014-04-06 14:49:21
如果您处理的是可观测值,则需要调用它们作为函数来检索它们的值,如果在表达式中使用它们(如Width() + 'px'
)。
如果您只是简单地传递一个可观察的(不是某种类型的表达式),那么绑定就足够聪明,可以打开可观察到的绑定。
所以,text: myObservable
是可以的,但是text: myObservable() + '!'
需要父母。
发布于 2014-04-06 14:49:13
这是因为在样式绑定中使用表达式,所以需要将px
追加到宽度中。
<!-- variable (usually a property of the current view model -->
<div data-bind="visible: shouldShowMessage">...</div>
<!-- comparison and conditional -->
The item is <span data-bind="text: price() > 50 ? 'expensive' : 'cheap'"></span>.
<!-- function call and comparison -->
<button data-bind="enable: parseAreaCode(cellphoneNumber()) != '555'">...</button>
<!-- function expression -->
<div data-bind="click: function (data) { myFunction('param1', data) }">...</div>
<!-- object literal (with unquoted and quoted property names) -->
<div data-bind="with: {emotion: 'happy', 'facial-expression': 'smile'}">...</div>
https://stackoverflow.com/questions/22900846
复制相似问题