这里是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上的所有“推送”和“拼接”更新更改为$ add和$ remove。
dropModelValue.$add(dragItem);
4)在dropModelValue和dropModelValue赋值之后添加$ save
dragModelValue[dragSettings.index] = dropItem;
dragModelValue[dragSettings.index].$save(dragSettings.index);
非常感谢您的帮助。非常感谢提前。
答案 0 :(得分:1)
您可以利用$extendFactory来覆盖推送/拼接行为,而不是在拖放库上进行黑客攻击。理想情况下,您只需更新记录的优先级,然后让服务器移动它们。
请记住,Firebase数据是一个JSON对象(不是数组,因此不会在JavaScript中排序),因此移动数组中的项目不会影响它们在服务器上的位置。如果您想对数据执行订单,则必须use priorities,而不是按键进行词典排序。
另外,你没有正确使用$ save - 你调用数组。$ save(item),而不是item。$ save(itemIndex)。从这些误解来看,可能还有很多其他问题。通过Angular Guide和Firebase JS Guide之旅是一个很好的入门。
答案 1 :(得分:1)
我曾经使用drap& amp ;;一种技术来重新排序Firebase阵列。 drop,是将键重新绑定到值,以便它们的词典顺序与用户设置的新顺序匹配。由于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)
})
这可能是次优的。我不知道优先事项。这种技术可能很容易适应使用优先级。上面的代码应该与lodash兼容,从2到4。
应用程序here中此技术的示例。 ranking
数组是bound到drap&通过Angular UI.Sortable。