我有一个简单的MVC4 + ko + breeze webapp有以下问题: 查询返回的breeze实体是简单的javascript对象,没有ko observables。 我检查了todo样本(正确地返回ko observables)并且我没有找到breeze配置为使用ko(并生成observables)的地方。 我尝试添加以下几行,但没有改变:
var core = breeze.core;
var entityModel = breeze.entityModel;
core.config.setProperties({
trackingImplementation: entityModel.entityTracking_ko,
remoteAccessImplementation: entityModel.remoteAccess_webApi
});
提前感谢您的帮助
答案 0 :(得分:4)
@frenchfraso - 自从您编写代码以来,可能需要了解Breeze的一些改进。
不推荐使用entityModel
命名空间,其上的所有内容都已提升为breeze
。 entityModel
命名空间仍然可以工作......但是当你有时间时,你想要摆脱它。以下是您今天创建EntityManager的方法:
var manager = new breeze.EntityManager(serviceName);
Knockout现在是默认的“modelLibrary”适配器,Web API是默认的“dataservice”适配器,因此您不再需要配置breeze core。
这意味着您可以 简单地删除问题中的每一行代码 :)
有一种新语法可指定非默认的Breeze适配器。这是一个配置Breeze使用Backbone模型库而不是Knockout的示例:
breeze.core.config.initializeAdapterInstances({modelLibrary: "backbone"});
答案 1 :(得分: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>
更改加载顺序后breeze返回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>
答案 2 :(得分:2)
疑难杂症! 问题出在WebApi控制器中的几个缺少的属性中:
[JsonFormatter, ODataActionFilter]
public class MyController : ApiController
{
// my methods...
}
添加[JsonFormatter,ODataActionFilter]后,返回的实体具有预期的ko observables!