Asp.net mvc 4 为什么我的KO绑定需要括号?

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);

我正在开发一个使用Durandal/Knockout/Breeze/WebApi的网站,其后端是MVC4。 我通过breeze查询我的api,如下所示:

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]