【问题标题】:How to use Angular-Xeditable's onBeforeSave / onAfterSave methods with more than $data as parameter如何使用超过 $data 作为参数的 Angular-Xeditable 的 onBeforeSave / onAfterSave 方法
【发布时间】:2014-06-18 14:00:48
【问题描述】:

当我第一次在我的应用程序中使用 Angular-Xeditable 时,我遇到了一个问题,试图弄清楚如何将 x-editable 更改保存到通过 ng-repeat 循环访问的对象。

该文档主要侧重于使用 onbeforesave 和 onaftersave 进行验证,虽然它确实表明它可以用于保存内容,但这些示例并未展示如何将 $data(或 $index)以外的任何内容传递给您的onbeforesave/onaftersave 方法。示例显示了保存 $scope.person 之类的内容,如果您有一个项目,这很好。

但是如果 30 人名单中的第 3 个人被编辑了怎么办?您当然不想将它们全部保存。如何只保存已编辑的对象而不是数组中的所有内容?

【问题讨论】:

    标签: javascript angularjs x-editable


    【解决方案1】:

    Angular-Xeditable 文档并没有说得很清楚,但似乎 $data(和 $index)只是注入值,您可以将几乎任何您想要的东西传递给 save/validate 方法。所以你应该做的是传递对象本身(或者只是它的 id)。

    给定以下标记:

    <div ng-repeat="p in people">
        <a href="#" editable-text="p.name" onaftersave="updatePerson(p)">{{p.name}}</a>
    </div>
    

    然后,您的控制器中将包含以下代码:

    $scope.updatePerson = function(person) {
        var ret = PersonService.save(person); // or whatever save mechanism you use
        // You need to return a error string if save fails, true otherwise
        if (ret !== null) {  // You have to make sure this logic works for your save service
            return ret;
        }
        return true; 
    }
    

    有了这个,你可以随心所欲地处理保存。您不必只使用 Angular-Xeditable 提供的 $data 或 $index 值。你可以很容易地做这样的事情:

    <div ng-repeat="p in people">
        <a href="#" editable-text="p.name" onaftersave="updatePerson(p.id, p.name, p.dohickey)">{{p.name}}</a>
    </div>
    

    并且仅更新具有提供的 ID 值的人员的姓名和 dohickey 字段。当然,您必须更改 updatePerson() 方法,以将 ID 作为第一个参数,将 name 和 dohickey 作为第二个和第三个参数。

    另外请注意,如果您像我在这里所做的那样使用 onBeforeSave 而不是 onAfterSave,p.name 还没有新值,您需要返回使用 $data 来获取新值。

    【讨论】:

    • 我整天都在尝试您的解决方案,但我不知道我的代码有什么问题。 X-Editable 文档没有那么有用。你的解释给了我一些很好的进步,但我仍然无法在我的数据库中进行最终保存,你介意看看into my question here吗?
    • 好的,我去看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多