Asp.net mvc 4 为什么我的KO绑定需要括号?
我正在开发一个使用Durandal/Knockout/Breeze/WebApi的网站,其后端是MVC4。 我通过breeze查询我的api,如下所示:Asp.net mvc 4 为什么我的KO绑定需要括号?,asp.net-mvc-4,knockout.js,asp.net-web-api,breeze,durandal,Asp.net Mvc 4,Knockout.js,Asp.net Web Api,Breeze,Durandal,我正在开发一个使用Durandal/Knockout/Breeze/WebApi的网站,其后端是MVC4。 我通过breeze查询我的api,如下所示: var getCategories = function() { var query = entityQuery .from('Categories') .orderBy('Order'); return manager.executeQuery(query);
var getCategories = function() {
var query =
entityQuery
.from('Categories')
.orderBy('Order');
return manager.executeQuery(query);
};
然后,在我的视图模型上:
function initCategories() {
service.getCategories()
.then(querySuccess)
.fail(queryFail);
function querySuccess(data) {
vm.categories(data.results);
};
其中vm是我的有界视图模型,类别当然是可观察的
最后,我的看法是:
<!-- ko foreach: categories -->
<div class="list_images">
<a data-bind="attr: { href: '#search/' + queryString() }" class="hover-shadow">
<img data-bind="attr: { src: image(), alt: name() }" width="240" height="180">
<h5 data-bind="text: name()"></h5>
</a>
</div>
<!-- /ko -->
以下是data.results包含的内容的屏幕截图:
除了需要使用括号外,它工作正常。
对于“普通”视图模型,视图绑定中不需要括号。
我不明白为什么只有微风对象(实体)才会发生这种情况。
编辑
在进一步调查之后,我注意到我的实体是类型proto.\u setCtor.proto,而不仅仅是一个对象。为什么?
即使我使用breeze管理器创建了一个新的实体,这也是我得到的对象:(
这里出了什么问题?Breeze将实体的所有属性序列化为封面下的ko.computeds。它使用它拦截对属性的更改,并通知所有其他使用属性的地方。也就是说,您应该只在使用条件绑定的地方使用Paran(例如,当您将某个属性与某个字符串组合以生成更长的字符串时。如果您只是绑定到标准的ko绑定处理程序,则不需要它。这不是答案。这是我感到困惑的自白。我不能重复您描述的问题 我完全理解你的要求。我同意你不必使用括号。你应该能够写:
<h5 data-bind="text: name"></h5>
<h5 data-bind="text: name()"></h5>
当我打开Chrome Developer Tools时,从服务器返回结果并在控制台中显示数据。结果
,我得到以下信息:
[proto._setCtor.proto
CreatedAt: function dependentObservable() {
Description: function dependentObservable() {
Id: function dependentObservable() {
IsArchived: function dependentObservable() {
IsDone: function dependentObservable() {
entityAspect: ctor
isEditing: function observable() {
__proto__: Object
, proto._setCtor.proto, proto._setCtor.proto]
我看不出和你的例子有什么显著的区别,是吗
当您在机器上使用相同的“Todo淘汰”样本执行相同操作时,会发生什么情况
你在使用什么浏览器?你在Chrome中看到同样的错误行为吗?问题是什么?我不太明白你是什么问题having@PWKad-我已经尖锐化了我的问题。我只是想问为什么在这种情况下我需要这些括号,而在所有其他情况下,绑定声明都正常工作。谢谢。是的,我明白什么Breeze为我做了,我的屏幕截图也显示了它。但是如果我去掉括号,它只会向屏幕吐出可观察代码,就好像它只是一个常规函数,而不是一个计算的可观察值!仅当你将可观察值与字符串或其他条件组合时。例如,如果你在绑定中使用ut其他任何内容(例如您的案例中的CSS)它只是起作用。这是因为你把值和一些东西结合起来。是的,我明白了。相信我,我知道什么是可观察的。你可以看到queryString应该和括号一起使用,它确实可以。其余的可以省略,但当我这样做时,它就断了。你能想出一个原因吗?在我的例子中,它们不能像预期的那样工作?我的怀疑是omehow Breeze。我可能遗漏了一些东西。你不必,一定有其他东西在破坏。就这么简单,创建一个小提琴,如果有其他事情发生,我可以帮你处理。Hanks,我正在使用to Do示例项目来学习Breeze,现在返回到它来与你的结果进行比较:项目正在运行e、 但我的控制台输出与您的不同:它不是dependenttobservable,而是:函数h(){if(0@graumanoz这很可能是因为您使用的是Knockout的缩小版本。确切地说,@PW Kad。如果您切换到Knockout….debug.js,您将看到
DependentToServable
@PW Kad-感谢您的帮助。我意识到我的脚本版本和/或调试/发布类型有问题,但找不到解决方法k、 所以…我从一个新的MVC4项目开始,再次安装了durandal/ko/breeze,并添加了所有现有的项目文件,最后一切都正常了。
[proto._setCtor.proto
CreatedAt: function dependentObservable() {
Description: function dependentObservable() {
Id: function dependentObservable() {
IsArchived: function dependentObservable() {
IsDone: function dependentObservable() {
entityAspect: ctor
isEditing: function observable() {
__proto__: Object
, proto._setCtor.proto, proto._setCtor.proto]