在Knockout.js data-bind上添加静态文本

时间:2012-05-23 06:52:00

标签: knockout.js

是否可以使用以下示例添加静态文本到数据绑定:

<p data-bind="text:someProperty"></p>

我想添加如下静态文本:

<p data-bind="text:' + $' + someProperty"></p>

4 个答案:

答案 0 :(得分:9)

您是否可以将静态文本与span标记一起放在span标记和data-bind上?

<p>text: <span data-bind="[whatever]" /></p>

答案 1 :(得分:8)

以上是伊姆兰评论的解释,这是一个很好的答案

您的text:表达式通常包含在ko.utils.unwrapObservable调用中:

ko.utils.unwrapObservable(someProperty)

但是当你使用更复杂的表达式时,隐式展开不起作用:

ko.utils.unwrapObservable(' + $' + someProperty) // won't find an observable; won't unwrap

所以你必须自己打开它:

' + $' + ko.utils.unwrapObservable(someProperty) // good

或者既然你知道这是一个可观察的,你可以简单地使用Imran的版本:

' + $' + someProperty() // good, if someProperty is definitely an observable

答案 2 :(得分:2)

我已经很晚了,(并且是Knockout的新手)但是这里是我用来在可观察量周围添加静态文本的另一个选项。在我的情况下,我想在从下拉列表中选择的值周围添加括号。

<强>的javascript

...
return function AppViewModel() {
    this.myOptionValues = ko.observableArray([
        { label: "Foo", value: "Bar" },
    ]);

    this.mySelectedValue = ko.observable();

    this.myValue = ko.computed(function () {
        return this.mySelectedValue() ? '(' + this.mySelectedValue().label + ')' : '';
    }, this);
};
...

<强> HTML

<small data-bind="text: myValue"></small> // (Foo)

答案 3 :(得分:0)

最好的办法是在viewModel中创建一个新的Computed并将文本绑定到该模型。 计算出的结束了您需要的可观察量和静态文本。 这就是它的样子

log_errors

然后,在HTML中只使用计算的observable。

var myViewModel = {
   ...
   var self= this;
   self.myObservable = ko.observable('some value here');
   self.myComputed = ko.pureComputed(function(){
       return 'some text here' + self.myObservable() + 'you can use other text here';
   });
   ...
}

如果您需要灵活性,可以使用计算的obs参数并在hmtl bind

中传递它们
<p data-bind="text: myComputed"></p>

并在html中

self.myComputed2 = ko.pureComputed(function(param1) {
   return param1 + self.myObservable;
}