问题标签 [knockout-mapping-plugin]
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.
javascript - 如何将计算的 observable 添加到 knockoutjs 映射
我正在使用映射插件来创建基于从服务器发送的对象的客户端视图模型。对象是基本地址信息,即:address1、address2、city、state、postal 等...
绑定视图模型后,如果用户更改地址,我希望更新谷歌地图画布。我创建了一个计算的 observable,它检查输入的值并调用地图更新函数。当我不使用映射插件时,我之前有这个工作,即模型是在本地定义的,但是一旦我引入映射,我就无法将计算的 observable 附加到视图模型。
我尝试按照映射插件文档中的说明进行操作,但计算出的 observable 没有触发更新。我有一个自定义映射,它调用一个 mapModel,其中包含示例中计算的 observable,但没有更新。
有任何想法吗?
knockout.js - 淘汰赛:数组的部分映射
看看这个小例子。
在此示例中,数据被部分映射。首先来自 Days 对象,然后(通过单击更新按钮)来自 DaysUpdate 对象。第二次更新从数组中删除“Monday”和“Tuesday”对象。我如何让那些留下来?
PS。感谢 Mark Robinson 提供了结构更好的示例。
javascript - 将真/假绑定到 Knockout JS 中的单选按钮
在我的视图模型中,我有一个值为真或假的 IsMale 值。
在我的 UI 中,我希望将其绑定到以下单选按钮:
我认为的问题是checked
需要一个字符串“true”/“false”。所以我的问题是,我怎样才能得到这个带有这个 UI 和模型的 2-way 绑定?
jquery - KnockoutJS 使用 Mapping Plugin 订阅属性更改
无论如何我可以告诉淘汰映射插件订阅所有属性更改调用某个函数吗?
我意识到我可以通过这种方式手动订阅属性更改事件:
不过,我希望能够进行一般订阅,因为我的视图模型可能会有所不同,我不想对属性名称进行硬编码。我创建了一个执行此操作的函数,但它可能不是最好的方法。它适用于除 IE7 及以下版本之外的所有浏览器。
在这里,我将视图模型作为参数并尝试通过订阅属性来反映它:
就像我说的那样有效,但是由于我使用的是映射插件,所以我希望有一个钩子可以用来为它提供一个通常订阅属性更改的函数。
就像是:
有任何想法吗?
knockout.js - JSON.NET 类名作为根
我正在使用 ASP.NET MVC4 WebApi 和 Knockout.js。
我的模型由包含 1-N Controls的页面组成。当我需要加载一个新的Page时,我将获取 HTML 视图和 JSON 序列化对象,并将所有内容与 KO 放在一起。由于我的模型非常动态,我将使用 KO 映射插件,因此我不必定义所有的 observables。
这是我的(非常简化的)模型:
实际上,我得到了这个(用 JSON.NET 序列化):
问题是我需要 JSON 将类名作为根键(因为 KO.Mapping 需要这种方式),而 JSON.NET 序列化程序不包含它。
这就是我需要 JSON 的方式:
knockout.js - KnockoutJS 映射更新无法与样式绑定一起正常工作
我有一个看起来像这样的 KnockoutJS 模板:
在运行第 N 次测试后,我意识到创建这样的模板是有缺陷的,因为 KnockoutJS 每次都会更新模板,即使数据没有改变。
我已经使用这两个小提琴来说明这一点:
- 使用 foreach 绑定(正常工作)
- 使用数据绑定(非常失败)
如您所见,如果您在 foreach 绑定上点击初始加载或加载更新的数据按钮,除非数据实际更改,否则 UI 永远不会重新渲染。不幸的是,如果您对数据样式绑定执行相同操作,则每次都会重新渲染。
我真的无法弄清楚有什么区别。我的印象是数据绑定的工作方式与 foreach 相同,但允许对模板内的对象进行更多控制。
我使用它的唯一原因是因为我有一组嵌套模板,并且我需要更接近手头的实际对象。我应该能够重新考虑,并摆脱这种方法,但我仍然想知道为什么这是一个问题。
不应该<!--ko foreach:-->
尊重 foreach 模板绑定使用的相同模式吗?
knockout.js - KnockoutJS 和映射插件使用模板后渲染进行数据更新的特定逻辑
这是一个两部分的问题。
首先,我在模板绑定上使用 afterrender 来完成每次模板呈现新数据时的操作。这工作正常......除了它工作得太正常了。除非添加或删除数据,否则它不会触发。
其次,为了解决第一个“问题”,我认为我需要编写自定义“更新”并检测数据是否已更改。这又是有道理的,但是我意识到映射中的更新函数也遵循“仅在添加或删除数据时运行”的想法。
所以我想我需要围绕映射模型的一个特定属性进行更新,例如:
但这只会变成一团糟,甚至不起作用。
如果你想检查一下,这里是FIDDLE 。
长话短说,我确定必须有一种方法可以在属性更新时订阅它?我想也许你只需要制作计算出的 observables?我要把这个扔出去,看看瑞恩是否想教我,因为他已经教过很多次了:)
knockout.js - 淘汰赛没有映射数组中对象的属性
似乎淘汰赛没有正确映射数组中对象的属性。
从 chrome 控制台查看此示例:
因此正在创建 javascript 对象,但未映射“名称”属性。
任何想法都非常受欢迎!
knockout.js - Knockout 映射插件或我的代码中的数组错误?
在使用 KO 映射插件更新页面上的数据时,我最近注意到一些有关的事情。我认为第一个现在已在 2.1.1 中修复,下面显示的第二个仍然存在:
我有一个简单的模型。问题在于它包含的地址数组。似乎当我使用映射插件时,它会跟踪数组中的 2 个元素,而实际上只有一个元素。我不确定这是否是我的代码或映射插件的问题。请考虑以下简单示例:
knockout.js - knockout.mapping 访问 json 中的数组
这是我下面的例子。我在我的项目中使用了 knockout.mapping 插件。
我想将邮件数组中的“发件人”元素填充到我的未排序列表中:
在注释代码中,我添加了使用 jquery ajax 从数据库中检索的数据。
将邮件绑定到我的列表的任何帮助。