问题标签 [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 - Knockout.js 使每个嵌套对象都成为 Observable
我使用 Knockout.js 作为 MVVM 库将我的数据绑定到某些页面。我目前正在构建一个库来对 Web 服务进行 REST 调用。我的 RESTful Web 服务返回一个简单的结构:
我有一个可观察的主要父母,myObject
. 当我做
中的可观察值myObject
是:
id
name
surname
我怎样才能使details
(理论上结构中的任何对象都是可观察的)?我需要这种行为,以便我可以在细节上设置一个计算出的 observable,并在任何内部数据发生变化时立即引起注意。
我已经设置了一个基本的递归函数,它应该可以解决问题。当然,myObject.details
它不会成为可观察的。
我很确定这是关于不正确的引用,但我该如何解决这个问题?谢谢你。
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 中闻到了一些腥味。我认为映射可观察数组时存在一些问题。
那么我做错了什么?请问有人吗?
如果我没有清楚地提到事情,请随时要求澄清。
提前致谢。
knockout.js - knockoutjs $index 在映射插件中不起作用
我正在使用 asp.net mvc 3 和 knockoutjs 2.0 和映射插件我已使用映射插件将我的模型转换为 json 如下
我的模型是
$index 不工作。
提前致谢
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
获取已检查项目的列表,但是当我使用...
或者...
对另一个期望相同的动作DirectorySearchModel
, model.Countries.arrCountries
总是null
!我想知道这是否是由于 Knockout.js在 MVC 期望 s 时将arrCountries
条目发布为s,但是将我的 MVC 代码更改为期望s 似乎并没有太大变化..!内在的对象似乎存在,但始终存在的却是内在。string[]
int[]
string[]
CountriesCollection
DirectorySearchModel
arrCountries
null
有任何想法吗?非常感谢任何帮助!
编辑
接收 Knockout.js viewModel 的操作:
getResultCount
方法:
固定的!
感谢 Konstantin 指出只需简单地从 $.post 切换到 $.ajax 即可将我的 Knockout.js 视图模型发送回我的 mvc 操作!这是我正在使用的 $.ajax 代码:
jquery - 通过淘汰赛提交给 MVC 操作的表单有额外的双引号
我在通过淘汰模型提交给我的控制器操作的数据方面遇到问题。每个字符串字段都有额外的双引号包围它,这是一个问题。
虽然我可以手动反序列化数据,但使用 MVC3 时似乎根本不应该出现这个问题。请记住,我需要提交表单而不是 ajax 帖子。
html:
脚本代码:
控制器动作:
模型发布后的内容:
原始帖子数据:
我究竟做错了什么?
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!
knockout.js - 淘汰赛性能 - 如果您的对象不可观察,您可以绑定属性吗?
我们有一个通过模板映射的大型嵌套可观察数组来创建树视图。该列表是动态的,但树中可能有 1000 多个元素。
我们在加载和搜索此集合时遇到性能问题 - 在 IE8 和 iPad 中最为明显。铬似乎还可以。
集合中的元素实际上并没有改变,所以我认为我们不需要 observable 的“通知”方面,但我们想利用数据绑定。
有没有办法对视图模型中不可观察的对象进行数据绑定?有没有办法在不使用 ko.mapping.fromJS() 的情况下创建不可观察的复杂数据集合?
json - 将 kogrid 与 json 和 knockout.mapping 一起使用
我尝试将 kogrid 与通过 knockout.mapping 映射的 json 数据一起使用。在我的 WebApp 中,它确实部分适用于 Firefox 和 Chrome - IE9 没有机会。现在我尝试用 fiddle.js 重现问题:但它根本不起作用 - 没有 FF,没有 Chrome,没有 IE9。我看不到我的错误,还有其他人吗?
knockout.js - 淘汰赛从自动映射的可观察对象创建一个空对象
我正在尝试解决 ko 映射的一个小问题。场景是我的 ViewModel 基本上是一个对象的集合。每个对象都是通过 json 调用创建的,以这种方式:
这完美地工作,我可以在我的 HTML 中做各种魔术。问题是,例如,如果我想在我的收藏中添加一些东西,比如说支持客户端“添加和编辑”场景。我想做类似的事情:
我希望 ViewModel 中的 AddNew 函数类似于:
基本上我需要推送一个与另一个已经存在的对象相同的对象,但当然所有属性都被删除了......
我正在考虑一种从列表中“克隆”一个对象并将所有可观察对象设置为空的方法,但恐怕我不知道从哪里开始:/