问题标签 [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.

0 投票
6 回答
40574 浏览

javascript - Knockout.js 使每个嵌套对象都成为 Observable

我使用 Knockout.js 作为 MVVM 库将我的数据绑定到某些页面。我目前正在构建一个库来对 Web 服务进行 REST 调用。我的 RESTful Web 服务返回一个简单的结构:

我有一个可观察的主要父母,myObject. 当我做

中的可观察值myObject是:

  • id
  • name
  • surname

我怎样才能使details(理论上结构中的任何对象都是可观察的)?我需要这种行为,以便我可以在细节上设置一个计算出的 observable,并在任何内部数据发生变化时立即引起注意。

我已经设置了一个基本的递归函数,它应该可以解决问题。当然,myObject.details它不会成为可观察的。

我很确定这是关于不正确的引用,但我该如何解决这个问题?谢谢你。

0 投票
2 回答
2974 浏览

knockout.js - 可观察数组的敲除映射似乎不起作用

我在我的 MVC 项目中使用淘汰赛 (KO)。我在服务器上创建了一个 MVC 模型(用于网格)并将其传递给视图。在视图上,它被序列化并转换为 KO 模型(使用 ko.mapping),该模型又用于绑定。然后在 HTML 中使用该绑定来创建网格。

这就是我的 MVC 网格模型的样子,然后通过 ko.mapping 将其转换为相应的 KO 模型:

很明显,主模型类 GridModel 由以下作为属性存在的类组成:

GridBodyModel:具有要在网格主体中呈现的行列表。

GridContext:具有总页数作为属性。它还具有其他属性,但这超出了本次讨论的范围。

GridHeaderModel:具有必须显示在网格标题中的单元格列表。

然后我有这个脚本,它将在新页面加载时执行。

Global_GridKOModel是全局 javascript 变量。 模型是来自服务器的 MVC 网格模型。

用户可以再次在页面上执行进一步的搜索。我通过 Ajax 发布新的搜索条件来处理这个问题。在这篇文章中,创建了一个新的 MVC 模型并作为 Ajax 响应发回。然后,这个新的 MVC 模型被简单地用于使用 ko.mapping 更新 Global_GridKOModel ,这反过来又刷新了之前在新页面加载时构建的网格(使用新数据)。我就是这样做的。

除以下情况外,一切正常。

发出一个没有返回结果的 Ajax 请求,即模型 GridModel 中的 GridBodyModel 和 GridHeaderModel 为空。该时间网格正确地显示没有找到任何记录。这是对的。这通过以下 HTML 绑定发生。

现在之后,如果发出另一个 Ajax 请求,但这次返回记录(我已经用 firebug 检查了响应,并确认确实返回了记录)。这次发生了网格构造,其中访问了各种可观察的数组。例如,为以下网格构造寻呼机是我编写的一段 HTML 绑定。

这次 KO 抛出以下错误,可以在 firebug 中看到。

无法解析绑定。消息:TypeError:GridHeader.Cells 不是函数;绑定值:attr:{colspan: GridHeader.Cells().length }

只要有记录被返回,它就可以正常工作,但是如上所述在没有返回记录后它会中断。请注意,当没有返回记录时,GridHeader 在早期响应中为空。我在 ko.mapping 中闻到了一些腥味。我认为映射可观察数组时存在一些问题。

那么我做错了什么?请问有人吗?

如果我没有清楚地提到事情,请随时要求澄清。

提前致谢。

0 投票
1 回答
646 浏览

knockout.js - knockoutjs $index 在映射插件中不起作用

我正在使用 asp.net mvc 3 和 knockoutjs 2.0 和映射插件我已使用映射插件将我的模型转换为 json 如下

我的模型是

$index 不工作。

提前致谢

0 投票
1 回答
2565 浏览

asp.net-mvc - Knockout.js 和复选框列表:发布到 mvc 控制器

我有一个看起来像这样的 MVC 视图模型:

CountryCollection 对象(第 9 行)如下所示:

现在,我正在创建 CountryCollection 的新空白实例,然后将其添加到 DirectorySearchModel 视图模型的空白实例中,然后将其全部序列化为 Knockout.js 的 javascript 视图模型:

我的复选框呈现为:<input checked="checked" data-bind="checked: Countries.arrCountries" id="Countries_arrCountries30" name="Countries.arrCountries" type="checkbox" value="1">. 检查一对意味着你最终得到了这个 Knockout.js 视图模型:

将我的视图正常提交(即通过提交按钮而不是使用 Knockout.js)到需要 a 的 MVC 操作DirectorySearchModel,我可以要求model.Countries.arrCountries获取已检查项目的列表,但是当我使用...

或者...

对另一个期望相同的动作DirectorySearchModelmodel.Countries.arrCountries总是null!我想知道这是否是由于 Knockout.js在 MVC 期望 s 时将arrCountries条目发布为s,但是将我的 MVC 代码更改为期望s 似乎并没有太大变化..!内在的对象似乎存在,但始终存在的却是内在。string[]int[]string[]CountriesCollectionDirectorySearchModelarrCountriesnull

有任何想法吗?非常感谢任何帮助!

编辑

接收 Knockout.js viewModel 的操作:

getResultCount方法:

固定的!

感谢 Konstantin 指出只需简单地从 $.post 切换到 $.ajax 即可将我的 Knockout.js 视图模型发送回我的 mvc 操作!这是我正在使用的 $.ajax 代码:

0 投票
2 回答
2654 浏览

jquery - 通过淘汰赛提交给 MVC 操作的表单有额外的双引号

我在通过淘汰模型提交给我的控制器操作的数据方面遇到问题。每个字符串字段都有额外的双引号包围它,这是一个问题。

虽然我可以手动反序列化数据,但使用 MVC3 时似乎根本不应该出现这个问题。请记住,我需要提交表单而不是 ajax 帖子。

html:

脚本代码:

控制器动作:

模型发布后的内容:

在此处输入图像描述

原始帖子数据:

我究竟做错了什么?

0 投票
1 回答
229 浏览

knockout.js - model in knockout trying to map again every time the ajax request returns. view is not updated

I started using knockout in my asp.net mvc 2 project

anyway i tried something simple. i created a model like so:

then on the document.ready of jquery i called:

in the aspx itself i have:

if i first put data into userViewModel the view displays as expected. and that's great but i want the view to start off empty at first. then after the user chooses a user i make an ajax request my response is this:

then in my callback function:

and that's it i guess. my view doesn't get refreshed with the new data from the server... what am i doing wrong?

thanks!

0 投票
1 回答
861 浏览

knockout.js - 淘汰赛性能 - 如果您的对象不可观察,您可以绑定属性吗?

我们有一个通过模板映射的大型嵌套可观察数组来创建树视图。该列表是动态的,但树中可能有 1000 多个元素。

我们在加载和搜索此集合时遇到性能问题 - 在 IE8 和 iPad 中最为明显。铬似乎还可以。

集合中的元素实际上并没有改变,所以我认为我们不需要 observable 的“通知”方面,但我们想利用数据绑定。

有没有办法对视图模型中不可观察的对象进行数据绑定?有没有办法在不使用 ko.mapping.fromJS() 的情况下创建不可观察的复杂数据集合?

0 投票
1 回答
1733 浏览

asp.net-mvc - Knockout.js 将对象数组绑定到重复