使用Backbone保存JQuery可排序列表?

时间:2014-04-08 16:52:50

标签: jquery jquery-ui backbone.js underscore.js-templating

我的主干代码(见下文)正在运行,没有任何问题,它获取数据并使用下划线模板显示/呈现数据。我还在骨干代码中添加了一个触发事件,以便JQuery将模板数据排序为可排序列表。

但是我尝试使用更新回调来更新我的可排序列表,这是为了获取列表的更新顺序,将其转换为JSON数据,然后使用Backbone.save();将数据保存到我的数据库。

我的骨干数据::

  var AdminColModel = Backbone.Collection.extend({
     url: '/Admin/GetMenuData'
  });

  var AdminEditMenu = Backbone.View.extend({
  el: $(".page"),
  render: function() {
      var that = this;
      var MyMenu = new AdminColModel(); 
      MyMenu.fetch({
        success: function(MyMenu) {
            var menutemp = _.template( $('script.MenuTemplate').html(), {MyMenu: MyMenu.toJSON() } );
            that.$el.html(menutemp);
            that.trigger('MenuSortableList', that); <- fires my sort list!  
        }
      });
  } //End of render function
   });

   $(document).ready(function(){  
     var MyMenu = new AdminEditMenu();
     MyMenu.on('MenuSortableList', function(event) { 
        $( "#AdminChangeMenuOrder" ).sortable({
        axis: 'y',
        placeholder: 'AdminMenuChangeableList',
        helper: "clone",
        forcePlaceholderSize: true,
        forceHelperSize: true,
        cursor: "move",
        update: function() {
            var sortableLinks = $(".AdminMenuChangeableList");
            $(sortableLinks).sortable();
            var linkOrderData = $(sortableLinks).sortable('serialize');
            console.log(linkOrderData); 
            linkOrderData.save();
        }
         });
     });
     MyMenu.render();  
   });

现在这一切都有效,除了“更新”中的代码。可分类调用中的段调用。

这是我的下划线模板,

 <script class="MenuTemplate" type="text/template"> 
    <section id="AdminChangeMenuOrder">
        <% _.each(MyMenu, function(MyMenu) { %> 
            <div id="<%= MyMenu.id %>" class="AdminMenuChangeableList"><%= MyMenu.title %> @ <%= MyMenu.path %> Current Level : <%= MyMenu.level %></div>
        <% }); %>
    </section>
 </script>

现在模板有效,但我一直在进行一些研究,看起来很多人,使用 li 列表,就是我应该用我的模板做的,就是很容易转换成JSON对象

欢迎大家帮忙,

由于

格伦

1 个答案:

答案 0 :(得分:0)

好的,我现在一切正常。首先,我必须将JQuery可排序列表转换为JSON格式,然后将其设置为主干模型并保存该模型,我不确定这是否是正确的方法,但它确实有效。

我的可排序列表的“更新”部分在哪里,我已更改,

        update: function() {
            var i = 1;
            var Data = $(this).sortable('toArray');
            _.each(Data, function(Data) { 
                var UpdatedMenuList = new Backbone.Model({ id: Data, level: i++ });
                UpdatedMenuList.url = '/Admin/UpdateMenuData';
                UpdatedMenuList.save(); 
            });
        }

如果有人认为这是错误的,请告诉我以及如何更好地更改我的代码。

由于

格伦。