组合字符串文字和对象值时Knockout.js attr错误

Meb*_*rne 14 knockout.js

使用Knockout工作一个新项目,基础文档似乎没有解释如下的情况.使用下面的attr调用; 产生了错误的href: "api/degrees/function c(){if(0"

<a data-bind="attr: { href: '/api/degrees/' + fieldId }">
Run Code Online (Sandbox Code Playgroud)

尽管以下内容正确生成了fieldId值

<a data-bind="attr: { href: fieldId }">
Run Code Online (Sandbox Code Playgroud)

是成功组合基本URL字符串和JS对象值以使用Knockout计算值的唯一方法吗?

在此先感谢您的帮助.

Ala*_*lan 18

尝试:

<a data-bind="attr: { href: '/api/degrees/' + fieldId() }">
Run Code Online (Sandbox Code Playgroud)

  • @ user1742487:为了回答你的问题,所有的observable都是函数.您通常必须"调用"它才能获得其价值.但是在一个绑定中,淘汰赛可以直接读取一个可观察的内容,所以当它完全独立时你没有必要调用它.但是当你有一个更复杂的表达式(例如那里的字符串连接)时,你_must_调用它,这样你就可以连接存储在observable中的值,而不是observable本身. (5认同)
  • 我在KO和javascript中没有足够强大的背景来解释,但我相信它与KO如何在javascript中解析和执行你的表达有关.在你的第一种情况下,你正在进行字符串连接,所以javascript隐式调用fieldId上的"toString",这是一个函数,它返回函数的内容.在你的第二个例子中,我认为knockout将尝试调用fieldId作为函数,以便在绑定之前获取值.我假设fieldId的类型为ko.observable. (3认同)