BreezeJS编辑数据不工作

BreezeJS编辑数据不工作,breeze,Breeze,我能够按照说明添加数据,这部分内容简单易懂。但当我试图按照指示编辑数据时,我完全迷路了 我遵循的是todo示例,它工作得很好,但是当我尝试使用相同的原则添加到我自己的项目中时,没有任何效果 在我的控制器中,我有以下功能: function listenForPropertyChanged() { // Listen for property change of ANY entity so we can (optionally) save var token = dataservi

我能够按照说明添加数据,这部分内容简单易懂。但当我试图按照指示编辑数据时,我完全迷路了

我遵循的是todo示例,它工作得很好,但是当我尝试使用相同的原则添加到我自己的项目中时,没有任何效果

在我的控制器中,我有以下功能:

function listenForPropertyChanged() {
    // Listen for property change of ANY entity so we can (optionally) save
    var token = dataservice.addPropertyChangeHandler(propertyChanged);

    // Arrange to remove the handler when the controller is destroyed
    // which won't happen in this app but would in a multi-page app
    $scope.$on("$destroy", function () {
        dataservice.removePropertyChangeHandler(token);
    });

    function propertyChanged(changeArgs) {
        // propertyChanged triggers save attempt UNLESS the property is the 'Id'
        // because THEN the change is actually the post-save Id-fixup 
        // rather than user data entry so there is actually nothing to save.
        if (changeArgs.args.propertyName !== 'Id') { save(); }
    }
}
问题是,每当我更改视图上的控件时,propertyChanged回调函数永远不会被调用

以下是服务的代码:

function addPropertyChangeHandler(handler) {
    // Actually adds any 'entityChanged' event handler
    // call handler when an entity property of any entity changes
    return manager.entityChanged.subscribe(function (changeArgs) {
        var action = changeArgs.entityAction;
        if (action === breeze.EntityAction.PropertyChange) {
            handler(changeArgs);
        }
    });
}
如果我在直线上放置一个断点:

var action = changeArgs.entityAction;
在我的项目中,它从未到达那里;在todo示例中,确实如此!它完全跳过整个过程,然后加载视图。所以我的回调函数都不起作用;实际上,没有订阅任何内容

因此,当我尝试保存更改时,manager.hasChanges()总是false,数据库中不会发生任何事情

我已经试了至少三天来让它工作,我完全被整个问题对我来说是多么复杂的事情弄得目瞪口呆

注意:我使用的是JohnPapa的热毛巾模板。我试着按照Todo编辑功能进行操作。。没有任何事情是我想要的


非常感谢您的帮助。

我一直认为问题出在javascript客户端端。事实证明,在创建投影DTO时,编辑不起作用

因此,在我的服务器端,我创建了一个查询:

public IQueryable<PersonDTO> getPerson(){
     return (from _person in ContextProvider.Context.Queries
            select new PersonDTO
            {
                Id = _person.Id,
                FirstName = _person.FirstName,
                LastName = _person.LastName
            }).AsQueryable();
}
也许如果有一个“manager.getEntity”也许会有帮助

无论如何,我更改了上面的查询,以直接从源代码获取它:

public IQueryable<Person> getPeople(){
    return ContextProvider.Context.People;
}
public IQueryable getPeople(){
返回ContextProvider.Context.People;
}
注意:ContextProvider是:

readonly EFContextProvider<PeopleEntities> ContextProvider = 
    new EFContextProvider<PeopleEntities>();
readonly EFContextProvider ContextProvider=
新的EFContextProvider();
因此javascript中的subscribe方法检查直接从上下文对象检索的信息。。有趣的真希望我没有在这上面花4天时间

readonly EFContextProvider<PeopleEntities> ContextProvider = 
    new EFContextProvider<PeopleEntities>();