“未捕获的 TypeError:无法处理绑定”与 KnockoutJS

Posted

技术标签:

【中文标题】“未捕获的 TypeError:无法处理绑定”与 KnockoutJS【英文标题】:"Uncaught TypeError: Unable to process binding" with KnockoutJS 【发布时间】:2019-03-30 22:11:55 【问题描述】:

我有这个代码:

<script>
    var viewModel = ;

    $.getJSON("URL", function (data) 
        viewModel = ko.mapping.fromJS(data);
        ko.applyBindings(viewModel);
    );
</script>

我在这段代码中绑定它:

<!-- ko foreach:  data: object, as: 'object'  -->
   
   <div>
     ... content (with more data-bindings) ...
   </div>

<!-- /ko -->

但我在控制台中收到这些错误:

未捕获的类型错误:无法处理绑定“foreach: function()return data:object, as:'object' ”

消息:无法处理绑定 (...)

消息:无法读取属性 (...)

我确定这是因为 observable(s) 不是预定义的,并且当 knockoutJS 尝试绑定它们时,它们根本不存在。

我试过这个:

var viewModel = 
    object: null
    (and other properties)
;

还有这个:

function viewModel() 
var self = this;
...

但这无济于事。我究竟做错了什么?我知道对此有很多问题,但我找不到我的问题的答案。

【问题讨论】:

【参考方案1】:

您只是在异步数据返回后应用绑定。这并不理想,但至少可以确保不会因绑定到初始空对象而导致问题。

您的视图设置方式要求您从服务器接收的data 满足此要求:

必须是对象 必须有一个属性object data.object 的值必须是可迭代的

即:这应该有效:

ko.applyBindings( object: [] )

如果你的数据是一个数组,你应该重写你的绑定:

<!-- ko foreach:  data: $data, as: 'object'  -->
<div>Bind to object.someProp here</div>
<!-- /ko -->

如果您的数据是一个对象,例如: object: a: 1 ,您可以移除 foreach 或使用 with 绑定。

一旦你得到这个工作,你应该在开始加载数据之前尝试使用占位符视图模型应用绑定。这样可以确保在加载期间呈现漂亮的 UI。

【讨论】:

以上是关于“未捕获的 TypeError:无法处理绑定”与 KnockoutJS的主要内容,如果未能解决你的问题,请参考以下文章

python网络编程基础(线程与进程并行与并发同步与异步)

=与==&与&&| 与 || 的区别

与 0 进行比较与与某个值进行比较是不是更快?

三.工具与市场-债券与债务股票与公司

RESTfulREST 与 RESTful 理解与实践

RESTfulREST 与 RESTful 理解与实践