无法理解绑定问题

时间:2017-06-26 15:40:10

标签: javascript mvvm knockout.js

我前段时间一直在使用这种类型的绑定(使用knockout.js)并且一切正常,但今天又出现了一个新问题。即:

我有一个相当复杂的视图模型,它具有基于某个过程参数的“部件”。整个视图模型“绑定”到页面,但任何进程只使用自己的部分。简单地说,想象一下这是你的viewmodel:

{
    1: Object (actual view model)
    2: Object (actual view model)
    3: Object (actual view model)
    6: Object (actual view model)
    getModelData = function(paramNumber) //returns the view model)
    extractJSObject = function(paramNumber) //console.logs a "JS" object
}

现在,大多数教程中通常的数据绑定语法遵循以下内容:

<input data-bind="value: displayedValue">

视图模型中存在一个带有可观察名为displayedValue的视图模型。但是,我使用的语法遵循这些规则:

<input data-bind="value: getModelData( processID ).DataSets. nameOfDataSet ()[ indexOfDataElement ]. fieldName">

给你举个例子: <input data-bind="value: getModelData(1).DataSets.Countries()[0].CountryPhoneCode">

现在,由于某种原因,这似乎不起作用,以前它曾经工作过。主要是 getModelData()函数存在于绑定到HTML的viewModel中,并且它确实返回它需要的任何东西,所以不要被它混淆,它是一个常规绑定,就像你是绑定任何其他对象,但我假设某些地方后来某些东​​西得到#@#cked。

图像显示控制台错误消息,以及我返回预期结果的两行代码,为什么我自己在控制台中输入正常但模型仍然无法绑定本身超出了我。 / p>

enter image description here

编辑:最后一件事,在HTML中,绑定不像控制台中的错误所示,绑定完全是这样的:

<input data-bind="value: getModelData(6).DataSets.HumanUser()[0].Address">

2 个答案:

答案 0 :(得分:2)

当Slim版本也被发布时,jQuery在3.0中不推荐使用bind,但是当jQuery存在时,似乎Knockout仍然认为.bind存在,所以当你时包含jQuery,它需要是完整的jQuery而不是纤薄的版本。不同之处在于,jquery的超薄版本“排除了ajax,效果和目前已弃用的代码-reference

答案 1 :(得分:1)

好的,因为我摆弄了正在使用的库的版本以及它们在这里的使用顺序是结论:

  1. Knockout.js不需要jQuery才能运行,没有它就可以正常工作,事实上,只要我删除了任何jQuery页面就开始工作并且绑定工作了。
  2. 但是如果存在jQuery,则必须在knockout.js之前加载它,否则会发生此错误。这条规则的一个例外是#3
  3. 旧版本的jQuery由于某种原因不会发生冲突,即使是在knockout.js之后加载,但是任何新版本都需要事先加载。
  4. 订购以下脚本:  1. jQuery  淘汰赛  3.引导程序 这一切都很顺利,感谢你让我看到的所有帮助和方向。

    编辑:嗯......显然它工作了大约一个小时,现在已经不再适用o.0我真的以为我已经到了最后。

    编辑2:显然服务器正在提供一个缓存版本,从我删除它的时候根本就没有任何jQuery。正确答案和原因被标记为“已回答”谢谢大家。