问题标签 [knockout-postbox]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7420 浏览

knockout.js - 在 Knockout 中链接/同步视图模型的最佳方式是什么?

如果您在一页上有多个视图模型,如何确保它们保持同步?例如,如果在一个视图模型上添加了一个项目或单击了一个按钮,并且您希望另一个视图模型对该更改敏感,那么 Knockout 可以本地管理它,还是使用一些消息传递或发布/订阅架构更好。

我想远离必须管理模型之间的 observables。

0 投票
1 回答
1144 浏览

knockout.js - 敲除数组显示为函数,而不是内容

我有以下内容:

然后在我看来,我有:

我希望看到a,b然后是publishedSelectedSets 的内容列表(只是数字),但显示的是:

选定集 ID:a,b

function observable() { if (arguments.length > 0) { // 写入 // 如果值没有改变则忽略写入 if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue , arguments[0])) { observable.valueWillMutate(); _latestValue = 参数[0]; if (DEBUG) observable._latestValue = _latestValue; observable.valueHasMutated(); } 返回这个;// 允许链式赋值 } else { // 读取 ko.dependencyDetection.registerDependency(observable); // 如果调用者进行了“读取”操作,则只需通知调用者更改 return _latestValue; } }

我尝试在末尾添加括号,publishedSelectedSets()但我得到了同样的结果。我可以使用调试器查看数组的_latestValue正确更新publishedSelectedSets,但数据在 DOM 中显示不正确。

我究竟做错了什么?

SELECTED_SETS:

正在工作的 JSFiddle,简化了 ko.utils.arrayMap 的使用:http: //jsfiddle.net/PTSkR/80/

仍然无法弄清楚为什么我的代码不起作用......

0 投票
1 回答
391 浏览

knockout.js - 发布 ko 邮箱值时执行查找

我开始写这个问题,想知道当一个可观察属性被另一个视图模型更改时如何触发查找函数,现在我在质疑我是如何解决这个问题的。无论如何,这是我的场景:

我有一个页面,上面有一个项目网格。用户单击一个按钮来编辑一个项目,我们会显示一个编辑弹出窗口,其中包含所有原始数据以及不在主网格对象中的有关该记录的详细数据。

在编辑窗口中,我对数据的“工作副本”有一个单独的 observable。当用户通过单击保存按钮提交更改时,我的计划是将其复制到原始对象,以便更改反映在网格中。

现在我正在使用 ko.postbox 库在两个视图模型之间进行通信。两者都包含一个可观察的来存储已选择并使用“syncWith”保持同步的项目。

这是它的样子:

当用户单击以编辑项目时...我希望将所选项目发布到编辑窗口 vm(已经使用 syncWith 发生),然后还执行 AJAX 查找以提取有关该项目的其余信息(没有想法如何做到这一点)。

我已经查看了手动订阅那个特定的 observable,以及在编辑窗口视图模型中使用计算的 observable 来调用单独的查找函数,但到目前为止我一直无法找到一个可行的解决方案: (

我目前的思路是不是走错了路,或者有人知道我该如何进行查找吗?

0 投票
2 回答
1634 浏览

javascript - 如何在淘汰赛js中的两个视图模型之间交换价值

嗨,我有两个视图模型,我想在它们之间传递一个值。这是js小提琴

我希望当用户单击显示另一个 div 按钮时,相应的项目名称应该显示在另一个 div 上。意味着我想将一个视图模型值显示到另一个视图模型中。其次,当用户单击显示另一个 div 按钮时,会出现另一个 div,我想要一个取消选项,以便用户可以返回到 firstdiv。我怎么能做到这一点。

0 投票
0 回答
656 浏览

knockout.js - passing object to other viewmodel using pubsub?

I've created 2 knockout components using the new knockout version 3.2 (and requirejs).

the first component contains a html template for showing a table of objects which are contained in an observable array in my viewmodel if the component.

the second component contains a html template for showing a modal for editing the values of a selected item from my first component.

As you can see I've used pubsub for communicating the selected id from de first component. This is used to components that require an id for communicating to the server for getting details of the selected source item. However for editing the selected item all data is already known on the client so an extra ajax request shouldn't be the solution so I want to communicate the complete sourceEntry object.

is this possible using knockout-postbox's pubsub implementation?

The next question is maybe a simple one. The model of component only needs to be loaded when editing. A hidden section doesn't make sense with performance in mind. Is there a way to dynamically inject the component at runtime with knockout or do I need jquery to add the component dynamically. Whats the best practice here?

0 投票
2 回答
2043 浏览

knockout.js - 使用 KnockoutJS 进行组件间通信

假设您有一个包含以下视图模型的产品概览页面:

  • 产品索引视图模型;绑定到整个页面的根视图模型
    • 产品列表视图模型;用于显示所有产品的小部件
    • 产品注册视图模型;用于注册新产品的小部件

小部件是通过使用自定义 HTML 元素(例如<product-list></product-list><product-registration></product-registration>)加载的。这很棒,因为我不必将这些小部件的任何知识放在我的根模型中。但是,我还想在用户注册新产品后刷新产品列表。简而言之:

如何从 ProductRegistrationViewModel 向 ProductListViewModel 发送信号?

我已经查看了Knockout Postbox,但这似乎并不能解决问题。如果我有多个产品列表并且我只想刷新其中一个怎么办?理想情况下,我想在组件的视图模型上实现一系列公共方法。然后从我的页面的根视图模型将两者联系在一起,如下所示:

但是,我无法从这里访问这些视图模型。还是我?

如何从我的根视图模型访问子视图模型?

最后,如果有人看到我的问题的更好解决方案:我全神贯注!

0 投票
1 回答
307 浏览

knockout.js - 当我删除输入内容时,PublishOn 没有触发

我正在使用淘汰赛邮箱来标记脏标志。代码如下所示:

nickName 和 emailAddress 绑定到输入框。

重现问题的步骤:

  1. 用户到昵称输入框删除内容。dirty被提出并启用保存按钮。
  2. 用户单击保存按钮。更改已保存,并且“保存”按钮变为禁用。
  3. 用户转到 emailAddress 并删除内容。dirty不以某种方式提出。用户无法保存更改。
  4. 用户在 emailAddress 或 nickName 上键入内容。dirty被提出并启用保存按钮。

您可以查看jsfiddle以查看它的实际效果。jsfiddle示例中没有保存按钮,只是尝试删除nickName的内容,然后删除emailAddress。您将看到删除 emailAddress 不会引发dirty事件。

这是淘汰邮箱中的已知错误吗?有没有更好的方法来检查淘汰赛的脏度?

0 投票
0 回答
412 浏览

javascript - 淘汰赛邮箱同步不使用可观察数组

我有以下视图模型。在视图模型一中,我还有一些将记录添加到 accountList 的代码。然后当我尝试在视图模型二中使用 accountList 时,它总是空的。syncWith 不应该让这两个 observableArrays 保持同步吗?

视图模型一

查看模型二

0 投票
2 回答
1011 浏览

javascript - Oracle JET 中的模块间通信

我使用Oracle JET QuickStart Basic 模板在 Oracle JET 中创建了一个示例应用程序。我希望应用程序在两个 mudule 之间进行通信。我已经尝试使用 Geertjan 的博客Intermodular communication in Oracle JET(Part 2)Intermodular communication in Oracle JET(Part 3)中提到的步骤,但不幸的是它似乎不起作用。如果有人向我解释如何使用 Oracle JET QuickStart Basic 模板进行模块间通信,那将是非常有帮助的。谢谢你。

0 投票
1 回答
184 浏览

knockout.js - WebSocket 消息回调与 Knockout JS 视图模型通信

我需要使 WebSocket 连接的“onmessage”回调函数中可用的数据连接到 KnockoutJS 的组件视图模型。

但这里的问题是,我没有在我的代码中创建 ViewModel 的实例。我正在使用 KnockoutJS 的自定义组件并通过以下代码注册它

我的组件的视图模型如下