问题标签 [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.
knockout.js - knockout.mapping.js - 更新 observableArray 不会更新 ko.computed 值
根据 knockout.mapping.js 的文档,它说数据对象的属性变为 observables,列表变为 observableArrays,但是我在更新应该是 ko.mapping.fromJS 产品的 observableArray 时遇到问题。
我创建了以下小提琴:
请注意,当您单击添加服务按钮时,控制台显示 observableArray 已更新,但 formattedService 计算值未更新。任何想法我做错了什么?如果您更改文本区域,该名称是可编辑的,但是当您将某些内容推送到服务列表时,服务列表的计算值不会更新......
感谢您的任何想法!
javascript - KnockoutJS - 将计算值添加到可观察数组
我正在使用 KnockoutJS 将数据绑定到页面,ViewModel 使用映射插件由来自 AJAX 调用的 JSON 响应填充,如下所示:
中间部分不起作用(没有该计算属性它可以正常工作)。“经纪人”是一个可观察的数组,我想为数组中称为 URL 的每个元素添加一个计算值。我将该 Brokers 数组绑定到一个 foreach,并且我想将该 URL 用作href
锚点的属性。有任何想法吗?
javascript - 使用 KnockoutJS 对带有对象的下拉菜单进行初始选择
我有一个看起来像这样的模型(不是实际代码,所以不要介意可能的错误输入)。
可以在下拉列表中选择的对象的options
容器列表。还包含一个对象列表,其中每个对象都具有与选项列表中的对象相同的对象。items
然后我遍历项目列表并在每一行显示一个下拉框。我这里需要将项目列表中当前项目中的对象作为选定选项。但是,当我没有设置 optionValue 而是仅尝试匹配整个对象时,它不起作用......我的 observable 然后可以正常工作,并且整个对象的所有订阅字段都会使用新的选择进行更新。然而,我得到了与 optionValue 一起使用的初始选择,Id
如下所示。
我现在的问题是只有绑定到 Id 的元素才会更新?我需要更新当前项目的所有属性,即使当我在下拉列表中更改某些内容时它只是现在更改的 Id。
我该怎么做?
javascript - Knockout.js 映射。如何仅更新视图模型的一部分?
我想建立一个简单的页面,用户可以从列表中选择一张照片并修改一些属性,所以我建立了模型:
和标记:
主要思想是,当用户单击照片时,setCurrent
调用函数并且我可以currentPhoto
使用单击绑定传递到的视图模型进行更新setCurrent
,但是存在问题 ko.mapping.fromJS(jsObj, viewModel)
(正如我从源代码中看到的),期望 viewModel 将是根模型。我知道我可以手动浏览所有可观察对象并刷新它们的值,或者取消映射 rootModel,设置属性然后更新 root,但我相信有更复杂和优雅的方法来做到这一点。
谢谢你。
javascript - Knockout.js,如何更改映射的二维数组的值?
我有一个控制器,它以 json 形式返回对象的二维数组。我从我的 javascript 拨打电话:
我也有以下html:
它生成一个漂亮的二维 html 表格,其中包含漂亮的彩色单元格(基于来自 Color 属性的类)。我现在如何将这种颜色更改为其他颜色?
我试过:board[1][1]({Color: 'red'});
,但我得到一个错误,说 board[1] 不存在......
还有一个问题,我怎样才能在绑定中添加多个类?我试过了:
但后来我得到:
这是一个错误还是我做错了什么?
javascript - knockout.mapping.js,是否可以只更新映射变量的一部分?
在我的 JS 中,我有以下 ajax 调用,它使用敲除映射插件绑定生成的 json。
/Get/GetRack
返回:
[{"Color":3,"Letter":"a","Points":5},null,null]
如您所见,数组中只有一个对象。另外两个是空值。
现在使用淘汰赛映射我可以做到:
这样做正确地更新了我的视图,现在我在第二个位置只看到一个字母 B。另外两个是空值。
我的问题是:我可以在不使用 mapping.fromJS 的情况下更新特定位置的值吗?
因此,假设我在索引 0 处有一个字母 A,我想将第二个 null 更改为
{ Color: 55, Letter: "b", Points: 88 }
并使我的 UI 自动更新以类似于此更改。如何才能做到这一点?
编辑:
我决定采用 John Earles 给出的例子。不幸的是我还有一个问题,因为我的数组是二维的。
您在这里有一个示例:http:
//jsfiddle.net/wgZ59/29/
(它与 John Earles 的示例非常相似,但包括二维数组)。
有人能指出为什么单击更改按钮不会更改元素的值吗?是否也可以在不调用 HasMutated() 的情况下更改它们的值?
最后一个(只有在前两个解决的情况下)。是否可以静态创建 html 表(因为例如我知道它总是 3x3,所以我想要两个 3 行 3 列的打印表,然后将每个单独的单元格绑定到我的矩阵单元格。我已经尝试过了,我有问题,因为敲除没有细胞的值......
编辑2:
我设法自己回答了上述问题,小提琴示例在这里:
因此,当我以这种方式声明数组时,我可以制作一个静态表并绑定单个单元格:
self.matrix = ko.observableArray([[0,0,0],[0,0,0],[0,0,0]]);
或者
self.matrix = ko.observableArray([[,,],[,,],[,,]]);
.
我可以更新这些值,它适用于静态表,但不适用于动态表(由淘汰赛动态创建)。您可以在小提琴页面上看到行为(此编辑开头的链接)。您知道为什么按“更改”按钮不会更新动态创建的表中的值吗?
javascript - 将切片与由 Knockout 的映射插件创建的数组一起使用
我整天都在为此苦苦挣扎,我不确定我错过了什么。我有一个使用 Knockout 创建的工作网格。我正在尝试将网格转换为使用映射插件,但它会破坏我的分页。如何使用带有映射插件的切片函数来返回我的数组的子集?我错过了什么?
我正在尝试绑定到 itemsOnCurrentPage(foreach:itemsonCurrentPage)。直接绑定到项目工作正常。当我在客户端手动构建我的阵列时,这很有效。现在我通过 jQuery 获取数据并使用映射插件。我无法弄清楚我错过了什么。任何帮助将非常感激。
knockout.js - 如何在我的模板中显示 knockoutjs.mapping 数据?
使用淘汰赛的映射插件,我将如何在我的模板中显示来自 JSON 对象数组的信息。?
我可以使用 Chrome 中的控制台通过 viewModel() 和 viewModel()[0].title() 访问对象,但不确定如何将此日期绑定到我的模板。
knockout.js - 为什么我的 Knockout Mapping 会杀死我的 $.change 函数?
我有以下在 MVC4 应用程序中运行良好的 Javascript 和 Html 代码。
但是当我尝试通过执行以下操作来实现映射时,我的 $('.data').change(function () { vm.updateOuting();} ); 永远不会被调用。Chrome 开发者工具似乎没有发现任何错误,我很茫然。信息被绑定到 html,就在我从文本框中跳出时,没有任何反应。(与以前相同的脚本引用)
knockout.js - Knockout JS - 需要从详细对象中填充可观察数组
这是小提琴 http://jsfiddle.net/srinivasanvee/yYEwJ/2/
我有一个列表,其中包含类别、产品、数量作为列,我可以选择从下拉列表本身添加新类别(选择 --Add new-- 选项),想要从类别订阅方法填充 categoryList observableArray(因为新添加的值必须应用于网格的所有行),不知道该怎么做,尝试使用 $root.categoryList.push(name),但没有运气
还是我们有更好的方法来处理这种情况?对此的帮助真的很感激,在此先感谢。