删除输入内容时 PublishOn 不触发
PublishOn not firing when I delete input content
我正在使用 knockout-postbox 来标记脏标志。代码如下所示:
var ProfileModel = function() {
this.nickName = ko.observable("name1").publishOn("dirty", true);
this.emailAddress = ko.observable("email1").publishOn("dirty", true);
};
ko.postbox.subscribe("dirty", function(newValue) {
// enable Save button
}, this);
昵称和电子邮件地址绑定到输入框。
<div id="profile">
<input data-bind="value: nickName" /> </label>
<input data-bind="value: emailAddress" /></label>
</div>
重现问题的步骤:
- 用户转到昵称输入框并删除内容。
dirty
已启动并启用“保存”按钮。
- 用户点击保存按钮。更改已保存,“保存”按钮将被禁用。
- 用户转到电子邮件地址并删除内容。
dirty
未以某种方式引发。用户无法保存更改。
- 用户在 emailAddress 或 nickName 上键入内容。
dirty
已启动并启用“保存”按钮。
您可以查看 jsfiddle 以查看实际效果。 jsfiddle例子中没有Save按钮,只是尝试删除nickName和emailAddress的内容。您会看到删除 emailAddress 不会引发 dirty
事件。
这是淘汰赛邮箱中的已知错误吗?有没有更好的方法来检查 knockout 中的脏度?
默认情况下,knockout-postbox
的 publishOn
功能不会再次发布最新值。在您的示例中,您正在为 "dirty"(空昵称)发布一个空字符串,然后再次发布一个空字符串(空电子邮件)。
publishOn
支持传入您自己的相等比较器。在您的情况下,您可以传入一个始终 returns false
.
的函数
例如:
var alwaysPublish = function() { return false; }
var ProfileModel = function() {
this.nickName = ko.observable("Ryan").publishOn("dirty", true, alwaysPublish);
this.emailAddress = ko.observable("ryan@knockmeout.net").publishOn("dirty", true, alwaysPublish);
this.log = ko.observableArray();
};
这是一个fiddle:http://jsfiddle.net/rniemeyer/qmbwhk8a/
您还可以通过设置 ko.postbox.defaultComparer
.
全局覆盖比较函数
我正在使用 knockout-postbox 来标记脏标志。代码如下所示:
var ProfileModel = function() {
this.nickName = ko.observable("name1").publishOn("dirty", true);
this.emailAddress = ko.observable("email1").publishOn("dirty", true);
};
ko.postbox.subscribe("dirty", function(newValue) {
// enable Save button
}, this);
昵称和电子邮件地址绑定到输入框。
<div id="profile">
<input data-bind="value: nickName" /> </label>
<input data-bind="value: emailAddress" /></label>
</div>
重现问题的步骤:
- 用户转到昵称输入框并删除内容。
dirty
已启动并启用“保存”按钮。 - 用户点击保存按钮。更改已保存,“保存”按钮将被禁用。
- 用户转到电子邮件地址并删除内容。
dirty
未以某种方式引发。用户无法保存更改。 - 用户在 emailAddress 或 nickName 上键入内容。
dirty
已启动并启用“保存”按钮。
您可以查看 jsfiddle 以查看实际效果。 jsfiddle例子中没有Save按钮,只是尝试删除nickName和emailAddress的内容。您会看到删除 emailAddress 不会引发 dirty
事件。
这是淘汰赛邮箱中的已知错误吗?有没有更好的方法来检查 knockout 中的脏度?
默认情况下,knockout-postbox
的 publishOn
功能不会再次发布最新值。在您的示例中,您正在为 "dirty"(空昵称)发布一个空字符串,然后再次发布一个空字符串(空电子邮件)。
publishOn
支持传入您自己的相等比较器。在您的情况下,您可以传入一个始终 returns false
.
例如:
var alwaysPublish = function() { return false; }
var ProfileModel = function() {
this.nickName = ko.observable("Ryan").publishOn("dirty", true, alwaysPublish);
this.emailAddress = ko.observable("ryan@knockmeout.net").publishOn("dirty", true, alwaysPublish);
this.log = ko.observableArray();
};
这是一个fiddle:http://jsfiddle.net/rniemeyer/qmbwhk8a/
您还可以通过设置 ko.postbox.defaultComparer
.