3

我对一个简单的 MVC4 + ko + 微风 webapp 有以下问题:查询返回的微风实体是简单的 javascript 对象,没有 ko 可观察对象。我检查了 todo 样本(它正确返回了 ko 可观察对象),但我没有找到将微风配置为与 ko 一起使用(并生成可观察对象)的地方。我尝试添加以下几行,但没有任何改变:

var core = breeze.core;
var entityModel = breeze.entityModel;

core.config.setProperties({
    trackingImplementation:     entityModel.entityTracking_ko,
    remoteAccessImplementation: entityModel.remoteAccess_webApi
});

提前感谢您的帮助

4

3 回答 3

4

@frenchfraso - 自从您编写代码以来,Breeze 的一些改进可能值得了解。

entityModel名称空间已弃用,其上的所有内容都已升级为breeze. 命名空间仍然有效......但你想在entityModel有时间的时候摆脱它。以下是您今天创建 EntityManager 的方法:

  var manager = 新微风.EntityManager(serviceName);

Knockout 现在是默认的“modelLibrary”适配器,Web API 是默认的“dataservice”适配器,因此您不再需要配置微风核心。

这意味着您可以简单地删除问题中的每一行代码:)

有一种新语法可以指定非默认的 Breeze 适配器。下面是一个将 Breeze 配置为使用 Backbone 模型库而不是 Knockout 的示例:

  微风.core.config.initializeAdapterInstances({modelLibrary: "backbone"});
于 2012-11-27T19:27:39.563 回答
4

我的问题是我在微风之后加载了淘汰赛,因此微风返回了我的 POJO 对象。

<script src="Scripts/jquery-1.9.1.js"></script>
<script src="Scripts/q.js"></script>
<script src="Scripts/breeze.debug.js"></script>    
<script src="Scripts/knockout-2.1.0.debug.js"></script>
<script src="Scripts/toastr.js"></script>
<script src="Scripts/require.js" data-main="App/main"></script>    

更改加载顺序后,微风返回 KO observables:

<script src="Scripts/jquery-1.9.1.js"></script>
<script src="Scripts/q.js"></script>
<script src="Scripts/knockout-2.1.0.debug.js"></script>
<script src="Scripts/breeze.debug.js"></script>    
<script src="Scripts/toastr.js"></script>
<script src="Scripts/require.js" data-main="App/main"></script>    
于 2013-05-25T08:45:14.120 回答
2

明白了!问题在于 WebApi 控制器中缺少几个属性:

[JsonFormatter, ODataActionFilter]
public class MyController : ApiController
{
    // my methods...
}

添加 [JsonFormatter, ODataActionFilter] 后,返回的实体具有预期的 ko observables!

于 2012-11-27T14:52:24.727 回答