问题标签 [knockout-components]

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 投票
1 回答
389 浏览

knockout-components - 与 Knockout 组件通信

有没有办法父视图模型通信到 KnockoutJS 组件?

我有一个包含引导模式对话框的组件,用于搜索客户并返回选定的客户。目前,为了让对话框出现,我在组件的params属性中从视图模型中传递了一个可观察的布尔值。为了使对话框出现,我将其设置为 true,这会调用对话框。我还传递了一个回调函数params来返回结果。

这是一个显示概念的小提琴演示:http: //jsfiddle.net/Quango/5bxbsLt6/

传递可观察的布尔值来调用对话框感觉不对,但这是我唯一可行的解​​决方案。我唯一的另一个想法是使用 ko-postbox 创建发布/订阅功能。

感觉应该有一种方法来调用动作,例如 component.Show()

0 投票
1 回答
1610 浏览

knockout.js - Knockout 3.2:组件/自定义元素可以包含子内容吗?

我可以创建在其中使用子标记的非空 Knockout 组件吗?

一个示例是用于显示模式对话框的组件,例如:

其中与组件模板一起:

输出:

0 投票
3 回答
5947 浏览

javascript - 渲染所有嵌套组件时,KnockoutJS afterRender 回调?

我有一个使用 3.2.0 的嵌套 KnockoutJS 组件的层次结构。它工作得很好,但我希望在加载和渲染整个组件层次结构后执行一些代码。它大致相当于 afterRender(),与 afterRender 相同的常见用例需要。

我已经尝试了一些方法,但到目前为止没有运气:

  1. 在根模板中添加了以下内容,但在加载嵌套组件之前调用它,所以为时过早。 <!--ko template: {afterRender: onLoad.bind($data)} -->
  2. 使用最新的 3.3.0-alpha 并在所有组件上指定 synchronous:true。但我相信,由于我使用的是 AMD,组件仍然是异步“加载”的,这意味着仅仅因为我的根 applyBindings() 返回,并不意味着所有组件都已加载和渲染。
  3. 甚至尝试构建延迟对象的集合,这些对象仅在加载相应组件时才被解析。这变得过于复杂并且由于我不会进入的原因仍然没有工作。

一旦加载和渲染了完整的 knockoutjs 组件层次结构,有没有办法调用回调?谢谢!

我刚刚遇到这两个线程,所以似乎其他人也在寻找这个。与现有解决方法的主要区别在于它们不适用于嵌套组件。

0 投票
1 回答
1700 浏览

knockout.js - 使用实例的带有淘汰组件的参数

我想使用 requirejs 将参数发送到我的淘汰赛组件的“实例”(单例)。淘汰赛帮助仅显示非实例参数传递的示例。

我有以下代码使用该实例并正常工作。

我想做的是像下面这样从组件传入参数。然而这显然是行不通的。

谢谢

0 投票
1 回答
642 浏览

javascript - 淘汰赛组件选择选项

头发都掉光了,求大神救救我

我想创建一个简单的剔除组件,它基于 JSON 对象呈现选择列表。这在我使用简单的字符串数组时有效,但是当我使用 JSON 对象时,以及使用 optionsText 和 optionsValue 绑定的 id 和 name 属性时,我会得到一个带有 [object object] 的下拉列表。

任何帮助将不胜感激。

0 投票
2 回答
1160 浏览

javascript - Knockout Components ,模板已经被注入到这个元素中,但还没有绑定

Knockoutjs Docs我不明白这句话:
模板已经注入到这个元素中,但还没有绑定。

0 投票
1 回答
2789 浏览

javascript - 在 Knockout 中初始化时调用组件函数

使用普通视图模型,我可以在初始化后在其上下文之外调用函数,如下所示:

http://jsfiddle.net/h01ky3pv/

如何使用组件的视图模型做这样的事情?我想在第一次加载 foo 组件时调用FooComponentViewModel'sFoo函数。

http://jsfiddle.net/r3d41q6c/2/

0 投票
1 回答
1612 浏览

javascript - Knockout 计算的 observable 没有触发'write'

我有一个相当简单的对象数组,可以在 KO 中编辑

这是一个测试用例。尝试单击项目并在下方编辑它们。有用。

然而...

加载到数组中的数据来自一个 JSON 字符串:

这必须被解析并转换为 JS 对象。这是在计算函数中完成的,如下所示:

现在我想要的是在模型更新时更新原始文本字符串。应该是模型上 ko.toJSON 的简单案例:

正如您从小提琴中看到的那样, self.text 没有更新。

为什么是这样?

我尝试了以下方法:

  • 从 read 函数返回 observableArray - 没有区别
  • 返回一个由可观察对象组成的 observableArray,每个对象都具有可观察的属性
  • 使用映射插件使所有可能的事情都可以观察到

我想这归结为 KO 是如何知道触发 write 函数的。如果 ssArray 的内容发生变化,那么肯定会write被解雇吗?但在我的情况下不是...

可能更复杂的是,这将是一个 KO 组件。文本输入实际上来自小部件传递的参数。所以我想它已经是一个可观察的了?所以它也需要更新父视图模型。

除此之外,我正在尝试使用可排序插件来允许对这些项目进行重新排序 - 但我已经从我的测试用例中删除了它。

0 投票
3 回答
4215 浏览

javascript - 使用 Knockout 组件时替换容器元素

有没有办法配置一个Knockout 组件替换容器元素,而不是将其内容嵌套在容器元素中?

例如,如果我有一个my-custom-element使用以下模板注册的自定义组件:

是否可以像这样使用组件:

最终产品是这样的:

而不是这个:(默认情况下 Knockout 呈现组件的方式)

根据对这个问题的回答,这个功能似乎内置在模板引擎中,我假设在渲染组件模板时也会使用它。

有没有办法指定一个组件应该用renderModeof呈现replaceNode

我知道“虚拟元素”语法,它允许在 HTML 注释中定义组件:

但我真的不喜欢这种语法——在评论中编写真正的代码感觉像是一种肮脏、肮脏的黑客行为。

0 投票
1 回答
2835 浏览

knockout.js - 淘汰赛组件 - 自定义组件加载器

我正在使用 Knockout Components 和System.js进行模块加载。

我有一个自定义组件加载器:

但这失败并显示以下消息:

TypeError: undefined is not a function {stack: (...), message: "undefined is not a function"}

这就是我的 result.template 的样子:

这就是我的 result.createViewModel 的样子:

这是完整的错误: