转换angular-dragdrop以使用firebase $ asArray

时间:2014-08-18 07:01:27

标签: angularjs drag-and-drop firebase angularfire

这里是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);

非常感谢您的帮助。非常感谢提前。

2 个答案:

答案 0 :(得分:1)

您可以利用$extendFactory来覆盖推送/拼接行为,而不是在拖放库上进行黑客攻击。理想情况下,您只需更新记录的优先级,然后让服务器移动它们。

请记住,Firebase数据是一个JSON对象(不是数组,因此不会在JavaScript中排序),因此移动数组中的项目不会影响它们在服务器上的位置。如果您想对数据执行订单,则必须use priorities,而不是按键进行词典排序。

另外,你没有正确使用$ save - 你调用数组。$ save(item),而不是item。$ save(itemIndex)。从这些误解来看,可能还有很多其他问题。通过Angular GuideFirebase 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