如何使用超过 $data 作为参数的 Angular-Xeditable 的 onBeforeSave / onAfterSave 方法
Posted
技术标签:
【中文标题】如何使用超过 $data 作为参数的 Angular-Xeditable 的 onBeforeSave / onAfterSave 方法【英文标题】:How to use Angular-Xeditable's onBeforeSave / onAfterSave methods with more than $data as parameter 【发布时间】:2014-06-18 14:00:48 【问题描述】:当我第一次在我的应用程序中使用 Angular-Xeditable 时,我遇到了一个问题,试图弄清楚如何将 x-editable 更改保存到通过 ng-repeat 循环访问的对象。
该文档主要侧重于使用 onbeforesave 和 onaftersave 进行验证,虽然它确实表明它可以用于保存内容,但这些示例并未展示如何将 $data(或 $index)以外的任何内容传递给您的onbeforesave/onaftersave 方法。示例显示了保存 $scope.person 之类的内容,如果您有一个项目,这很好。
但是如果 30 人名单中的第 3 个人被编辑了怎么办?您当然不想将它们全部保存。如何只保存已编辑的对象而不是数组中的所有内容?
【问题讨论】:
【参考方案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吗? 好的,我去看看。以上是关于如何使用超过 $data 作为参数的 Angular-Xeditable 的 onBeforeSave / onAfterSave 方法的主要内容,如果未能解决你的问题,请参考以下文章