Javascript 基于textInput的自定义敲除绑定

Javascript 基于textInput的自定义敲除绑定,javascript,knockout.js,Javascript,Knockout.js,我对定制绑定有一个非常具体的要求,我不知道如何实现 我想使用新的textInput绑定,但不幸的是,它不能很好地与我使用的占位符polyfill配合使用。我一直在使用keyup上valueUpdate的值绑定,但我喜欢textInput也可以处理的许多边缘情况 这里我的要求是,在值等于占位符属性值的情况下,viewmodel应该有一个空字符串 这里有一个比较当前和基于textInput的方法的示例,请在类似IE8的浏览器中打开它以查看差异 编辑 试图重新解释这个问题。问题在于,通过将空输入字段替

我对定制绑定有一个非常具体的要求,我不知道如何实现

我想使用新的textInput绑定,但不幸的是,它不能很好地与我使用的占位符polyfill配合使用。我一直在使用keyup上valueUpdate的值绑定,但我喜欢textInput也可以处理的许多边缘情况

这里我的要求是,在值等于占位符属性值的情况下,viewmodel应该有一个空字符串

这里有一个比较当前和基于textInput的方法的示例,请在类似IE8的浏览器中打开它以查看差异

编辑

试图重新解释这个问题。问题在于,通过将空输入字段替换为等于占位符属性的值(几乎是占位符的所有多边形填充所采用的方法),将输入字段的值剔除绑定到viewmodel和输入的多边形填充

之前我一直在使用值绑定,并在keyUp事件上使用valueUpdate。这意味着绑定的viewmodel属性会随着用户的输入而更新。当多边形填充替换模糊事件中JS中的值时,输入字段将具有占位符属性的值,但viewModel值仍然是空字符串

textInput绑定更复杂但更有用,但是polyfill替换空输入值也会触发淘汰更新。由于textInput处理的复杂性和边缘情况,因此不能选择在keyUp上重用valueUpdate的旧方法。我想要的是创建一个像textInput一样的绑定,但是知道这样的多填充

基本上如果我有

<input data-bind="placeholderTextInput:query" type="text" placeholder="Search..."/>

viewModel = {
    query: ko.observable('');
}

视图模型={
查询:ko.可观察(“”);
}
绑定应正常工作,但如果
input.value===input.attribute['placeholder']
viewModel.query()==='
Ug

免责声明:我目前无法轻松访问IE8

据我所知,这个问题没有简单的解决办法

我知道有两种选择:

选项1:查找其他占位符填充

这是我将采取的方法。在文本框中查找实际上没有填充的内容,但在其顶部放置另一个元素

选项2:使用计算的

如果您无法使用特定的占位符库,那么您需要创建一个计算值,暂时将其称为
query2


query2
的计算函数中,让它访问
query
的值,然后将其与
占位符
属性进行比较。如果它们匹配,则返回
,否则返回
查询

我不明白你在问什么。“viewmodel应该有一个空字符串”是什么意思?你想在搜索输入适合一个项目时清除它吗?@GôTôhi,编辑现在更清晰了吗?第二个选项肯定不是我想要的方法。这会使viewmodel过于复杂,需要对可能具有占位符值的任何输入进行重新关联。自定义绑定绝对是正确的方法,因为这是viewmodel和DOM之间的中介,我只是有点被困在如何在这里进行。如果不可能的话,选项1可能就是最终发生的事情。