在rails haml partials中执行jquery通过jquery ajax通过$ q返回

时间:2012-11-15 00:03:10

标签: jquery ajax coffeescript haml angularjs

所以我正在为预先存在的Rails应用程序编写一个Angular前端。我理解使用$ q充其量只是一个中间步骤,然后转换后端通过JSON直接向REST服务器提供REST Api,但遗憾的是暂时存在于各种Ruby位置的逻辑太多,很容易将所有内容重写为纯粹的角度格式。

问题是,如何在返回的部分中正确实例化和处理ng属性。以下是代码的清理版本。

  Company.Controller.TypeAccordionController = (scope, http, element, q, typeJQueryService) ->

    scope.getTheDamnType = (id) ->
      typeJQueryService.multipart(id).then (response)->
        angular.element('.datePicker').datepicker()


   Company.Controller.TypeAccordionController.$inject = ['$scope', '$http', '$element',      '$q','typeJQuery']

返回的HAML正在页面上正确显示,并且正在成功实例化datepicker。返回的HAML包含以下内容:

 = ff.check_box :completed, :class => "field sale_#{sale.price}", :disabled => sale.completed?

通过以下服务:

 Company.MyModule.factory 'TypeJQuery', ($q, $rootScope) ->
   multipart: (element) ->
     deferred = $q.defer()
     $.get "..." + element, (data) ->
       $rootScope.$apply ->
         deferred.resolve data
     deferred.promise

在指令中定义了以下Javascript:

 Company.Directive.DatePickerDirective = ->
   restrict: 'C'
   controller: Company.Controller.TypeAccordionController
   link: (scope, element, attrs) ->
     $(".type-form input[type='checkbox']").click (e)->
          $checkbox = $(e.target)
          $date = $checkbox.parent('.checkbox').siblings(".target").find('.actually_completed_on_date')
          if $checkbox.is(':checked')
              if $date.val() == undefined || $date.val().length == 0
                  $date.val($.datepicker.formatDate("dd-M-yy", new Date()))
              else
                  $date.val("")

   Company.MyModule.directive 'datePicker', Company.Directive.DatePickerDirective

请注意,在围绕此包装Angular之前,javascript曾经直接存在于资产管道中,并且用于运行正常。

0 个答案:

没有答案