首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除输入内容时不触发PublishOn

删除输入内容时不触发PublishOn
EN

Stack Overflow用户
提问于 2015-01-29 17:11:47
回答 1查看 340关注 0票数 0

我正在用敲除邮筒标记脏旗。代码如下所示:

代码语言:javascript
运行
复制
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);

nickName和emailAddress绑定到输入框。

代码语言:javascript
运行
复制
<div id="profile">
    <input data-bind="value: nickName" /> </label>
    <input data-bind="value: emailAddress" /></label>
</div>

重新创建问题的步骤:

  1. 用户转到nickName输入框并删除内容。引发dirty并启用保存按钮。
  2. 用户单击保存按钮。保存更改,并禁用Save按钮。
  3. 用户转到emailAddress并删除内容。dirty并不是以某种方式提出的。用户无法保存更改。
  4. 用户在emailAddress或nickName上键入某些内容。引发dirty并启用保存按钮。

您可以查看小提琴以查看它的运行情况。在jsfiddle示例中没有保存按钮,但只需尝试删除nickName的内容,然后删除emailAddress。您将看到删除emailAddress不引发dirty事件。

这个已知的臭虫在淘汰机邮箱里吗?在淘汰赛中有更好的方法来检查污秽吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-03 02:49:38

默认情况下,publishOn功能的knockout-postbox不会再次发布最新的值。在您的示例中,您将发布一个空字符串表示“脏”(空昵称),然后再发布一个空字符串(空电子邮件)。

publishOn确实支持传递您自己的等式比较器。在您的示例中,您可以传递一个始终返回false的函数。

例如,类似于:

代码语言:javascript
运行
复制
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();
};

这里有一个小提琴:http://jsfiddle.net/rniemeyer/qmbwhk8a/

还可以通过设置ko.postbox.defaultComparer全局重写比较函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28220595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档