这是AngularJS和Firebase的新手,我正在尝试按照下面的链接转换angular-dragdrop.js,以使用angularFire 0.8.0 $asArray特性:
https://github.com/codef0rmer/angular-dragdrop/blob/master/src/angular-dragdrop.js
我只是想知道以下更改是否足够:
1)在函数声明中包含firebase
(function (window, angular, firebase, undefined) {2)在jqyoui回调函数中包含$firebase
var jqyoui = angular.module('ngDragDrop', []).service('ngDragDropService', ['$firebase', '$timeout', '$parse', function($timeout, $parse) {3)将dropModelValue和dropModelValue上的所有push和splice更新改为$add和$remove。
dropModelValue.$add(dragItem);4)在dropModelValue和dropModelValue赋值后添加$save
dragModelValue[dragSettings.index] = dropItem;
dragModelValue[dragSettings.index].$save(dragSettings.index);非常感谢您的帮助。非常感谢提前。
发布于 2014-08-19 05:08:07
您可以利用$extendFactory覆盖推送/拼接行为,而不是修改拖放库。理想情况下,您只需更新记录的优先级,并让服务器移动它们。
请记住,Firebase数据是JSON对象(不是数组,因此不会在JavaScript中排序),因此在数组中移动项不会影响它们在服务器上的位置。如果您想对数据强制排序,而不是按键进行字典排序,则必须使用use priorities。
而且,您没有正确使用$save --调用array.$save(item),而不是item.$save(itemIndex)。从这些误解来看,可能还有很多其他问题。了解Angular Guide和Firebase JS Guide是一个很好的入门教程。
发布于 2014-08-19 06:31:24
我使用drap & drop对Firebase数组重新排序的一种技术是将键重新绑定到值,以便它们的字典序顺序与用户设置的新顺序相匹配。由于Firebase将强制关键字的字典顺序,因此交换2个值的关键字将交换这些值。每次用户删除一个项目时,重新绑定密钥:
_(myFirebaseArray)
.map('$id')
.sortBy()
// at this stage we have the array of keys sorted lexicographically
// we pair each key with the values, which are sorted by the user
.zipObject(myFirebaseArray)
// for each pair, bind the key to the value and save
.each(function (value, newKey) {
value.$id = newKey
myFirebaseArray.$save(value)
})这可能是次优的。我没有意识到优先次序。这项技术可能可以相当容易地适应优先级的使用。上面的代码应该与2到4的lodash兼容。
此技术在应用程序here中的示例。通过Angular UI.Sortable将ranking阵列bound到drap &drap。
https://stackoverflow.com/questions/25357840
复制相似问题