【问题标题】:Convert value into lower case before knockout binding在敲除绑定之前将值转换为小写
【发布时间】:2015-09-02 12:47:53
【问题描述】:

Demo Here

我用 knockoutjs 绑定了一个标签。值绑定始终应为小写。虽然它将在 js 模型中保持大写。如何做到这一点?

Javascript

var model = { 
    name:ko.observable("Test") 
}

ko.applyBindings(model);

HTML

<label data-bind="text:name">

【问题讨论】:

  • name().toLowerCase() 在您看来很简单。欢呼
  • 不,它应该在视图模型中保持大写
  • 它会,但在视图中你会以小写形式看到
  • 我没听懂你。你能在我的小提琴链接中更正它吗?
  • @supercool - 当用户编辑输入中的值时,这不起作用。

标签: javascript jquery html knockout.js data-binding


【解决方案1】:

你只需要在视图中使用toLowerCase

查看:

<div class='liveExample'>   
     <p> name: <label data-bind='text: name().toLowerCase()'></label></p> 
</div>

<b>Original Value:
<pre data-bind="text:ko.toJSON($data,null,2)"></pre>

工作小提琴示例here

【讨论】:

  • 敢于解释。 OP要求如此。
  • 您意识到这会将其简化为单向绑定,对吧?例如,当您更改文本框中的文本时,它不再更新模型。
  • 是的,但我说它可以是一个标签。所以我就这样做了。
  • 谢谢超级酷。其实我试过 name.toLowerCase() 。你的代码对我有用。
  • @Jamiec 我把它贴上了标签以避免进一步的误解。欢呼,并正确指出。
【解决方案2】:

不清楚你想做什么,特别是当值来自文本区域时,但你可以使用可写计算来做任何事情:

model.lowerName = ko.computed({
    read: function() {
        return model.name().toLowerCase();
    },
    write: function(newValue) {
        // ...save this however it is you want to save it...
    }
});

HTML:

<input data-bind="value:lowerName">

关于您更新的问题:您的更新完全改变了问题。如果您不需要元素的更新并且仅显示 name 中的内容,您有两种选择:

  1. 只读计算:

    model.lowerName = ko.pureComputed(function() { return model.name().toLowerCase(); });
    

    HTML:

    <label data-bind="text:lowerName"></label>
    
  2. 只需在绑定中执行:

    <label data-bind="text:name().toLowerCase()"></label>
    

【讨论】:

  • @mattytommo:嗯,有人 没抓住重点。同样,value 是双向绑定。所以一个问题stating that binding 是关于双向处理的。没有假设,没有推断。也没有燃烧,我只是要求 OP 清楚他们想要什么。他们现在已经做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2014-06-27
  • 2016-02-24
  • 2021-10-13
  • 2016-03-21
  • 1970-01-01
相关资源
最近更新 更多