0

我正在尝试创建一个可排序的项目列表。目前我正在为此使用 jQuery 可排序。该列表是使用 Ember 视图创建的。当一个项目被丢弃时,我希望用新订单更新 Ember 模型。在稍后阶段,我想将其保存回服务器。

在下面的代码中,您可以看到我是如何将 jQuery 代码附加到视图元素的。拖动本身可以完美运行,并且还调用了停止功能。

Scrum.Sortable  = Ember.View.extend({
tagName :   'div',
didInsertElement:   function(){
    this.$().sortable({
        placeholder: "ui-state-highlight",
        stop:function(){
            var order   = 1;
            $('div.pb-item').children().each(function(index){
                $(this).find('.order').each(function(){
                    //
                    // Access and save the model here
                    //
                    $(this).html(order++);
                });
            });
        }
    });

}
});

您还可以看到我手动更新视图 html。这就是我想存储在模型中的内容。不幸的是,我似乎无法访问该模型。

非常感谢有关如何执行此操作的任何想法。

谢谢。

4

2 回答 2

2

只需在函数外部保存对控制器的引用,以便变量在闭包中可见。然后您将可以访问控制器,从而访问您的模型等。

didInsertElement: function() {
  controller = this.get('controller')
  ...
    $(this).find('.order').each(function(){
      // Here you have access to the controller variable.
    });
  ...
}

由于控制器通常在视图的整个生命周期中保持不变,因此这是安全的,并且比保存对模型本身的引用更好,因为您的模型可能会改变。

于 2013-10-15T02:42:10.630 回答
1

您可以访问控制器并从控制器访问模型。

this.get('controller').get('model')或者您也可以将上下文传递给您的视图,这可能是您的模型。{{查看 Scrum.Sortable context=this}}

于 2013-10-14T12:09:43.587 回答