问题标签 [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.
knockout-components - 与 Knockout 组件通信
有没有办法从父视图模型通信到 KnockoutJS 组件?
我有一个包含引导模式对话框的组件,用于搜索客户并返回选定的客户。目前,为了让对话框出现,我在组件的params
属性中从视图模型中传递了一个可观察的布尔值。为了使对话框出现,我将其设置为 true,这会调用对话框。我还传递了一个回调函数params
来返回结果。
这是一个显示概念的小提琴演示:http: //jsfiddle.net/Quango/5bxbsLt6/
传递可观察的布尔值来调用对话框感觉不对,但这是我唯一可行的解决方案。我唯一的另一个想法是使用 ko-postbox 创建发布/订阅功能。
感觉应该有一种方法来调用动作,例如 component.Show()
?
knockout.js - Knockout 3.2:组件/自定义元素可以包含子内容吗?
我可以创建在其中使用子标记的非空 Knockout 组件吗?
一个示例是用于显示模式对话框的组件,例如:
其中与组件模板一起:
输出:
javascript - 渲染所有嵌套组件时,KnockoutJS afterRender 回调?
我有一个使用 3.2.0 的嵌套 KnockoutJS 组件的层次结构。它工作得很好,但我希望在加载和渲染整个组件层次结构后执行一些代码。它大致相当于 afterRender(),与 afterRender 相同的常见用例需要。
我已经尝试了一些方法,但到目前为止没有运气:
- 在根模板中添加了以下内容,但在加载嵌套组件之前调用它,所以为时过早。
<!--ko template: {afterRender: onLoad.bind($data)} -->
- 使用最新的 3.3.0-alpha 并在所有组件上指定 synchronous:true。但我相信,由于我使用的是 AMD,组件仍然是异步“加载”的,这意味着仅仅因为我的根 applyBindings() 返回,并不意味着所有组件都已加载和渲染。
- 甚至尝试构建延迟对象的集合,这些对象仅在加载相应组件时才被解析。这变得过于复杂并且由于我不会进入的原因仍然没有工作。
一旦加载和渲染了完整的 knockoutjs 组件层次结构,有没有办法调用回调?谢谢!
我刚刚遇到这两个线程,所以似乎其他人也在寻找这个。与现有解决方法的主要区别在于它们不适用于嵌套组件。
knockout.js - 使用实例的带有淘汰组件的参数
我想使用 requirejs 将参数发送到我的淘汰赛组件的“实例”(单例)。淘汰赛帮助仅显示非实例参数传递的示例。
我有以下代码使用该实例并正常工作。
我想做的是像下面这样从组件传入参数。然而这显然是行不通的。
谢谢
javascript - 淘汰赛组件选择选项
头发都掉光了,求大神救救我
我想创建一个简单的剔除组件,它基于 JSON 对象呈现选择列表。这在我使用简单的字符串数组时有效,但是当我使用 JSON 对象时,以及使用 optionsText 和 optionsValue 绑定的 id 和 name 属性时,我会得到一个带有 [object object] 的下拉列表。
任何帮助将不胜感激。
javascript - Knockout Components ,模板已经被注入到这个元素中,但还没有绑定
从Knockoutjs Docs我不明白这句话:
模板已经注入到这个元素中,但还没有绑定。
javascript - 在 Knockout 中初始化时调用组件函数
使用普通视图模型,我可以在初始化后在其上下文之外调用函数,如下所示:
如何使用组件的视图模型做这样的事情?我想在第一次加载 foo 组件时调用FooComponentViewModel
'sFoo
函数。
javascript - Knockout 计算的 observable 没有触发'write'
我有一个相当简单的对象数组,可以在 KO 中编辑
这是一个测试用例。尝试单击项目并在下方编辑它们。有用。
然而...
加载到数组中的数据来自一个 JSON 字符串:
这必须被解析并转换为 JS 对象。这是在计算函数中完成的,如下所示:
现在我想要的是在模型更新时更新原始文本字符串。应该是模型上 ko.toJSON 的简单案例:
正如您从小提琴中看到的那样, self.text 没有更新。
为什么是这样?
我尝试了以下方法:
- 从 read 函数返回 observableArray - 没有区别
- 返回一个由可观察对象组成的 observableArray,每个对象都具有可观察的属性
- 使用映射插件使所有可能的事情都可以观察到
我想这归结为 KO 是如何知道触发 write 函数的。如果 ssArray 的内容发生变化,那么肯定会write
被解雇吗?但在我的情况下不是...
可能更复杂的是,这将是一个 KO 组件。文本输入实际上来自小部件传递的参数。所以我想它已经是一个可观察的了?所以它也需要更新父视图模型。
除此之外,我正在尝试使用可排序插件来允许对这些项目进行重新排序 - 但我已经从我的测试用例中删除了它。
javascript - 使用 Knockout 组件时替换容器元素
有没有办法配置一个Knockout 组件来替换容器元素,而不是将其内容嵌套在容器元素中?
例如,如果我有一个my-custom-element
使用以下模板注册的自定义组件:
是否可以像这样使用组件:
最终产品是这样的:
而不是这个:(默认情况下 Knockout 呈现组件的方式)
根据对这个问题的回答,这个功能似乎内置在模板引擎中,我假设在渲染组件模板时也会使用它。
有没有办法指定一个组件应该用renderMode
of呈现replaceNode
?
我知道“虚拟元素”语法,它允许在 HTML 注释中定义组件:
但我真的不喜欢这种语法——在评论中编写真正的代码感觉像是一种肮脏、肮脏的黑客行为。
knockout.js - 淘汰赛组件 - 自定义组件加载器
我正在使用 Knockout Components 和System.js进行模块加载。
我有一个自定义组件加载器:
但这失败并显示以下消息:
TypeError: undefined is not a function {stack: (...), message: "undefined is not a function"}
这就是我的 result.template 的样子:
这就是我的 result.createViewModel 的样子:
这是完整的错误: