2

ドキュメント コラボレーション用のアプリを開発しています。セクションのビューと編集テンプレートを読み込むことはできますが、公開には小さな障壁が 1 つあります。フォームは、href の代わりにアクションを使用するため、少し異なります。応答はまさに私が望むものであり (Chrome 開発ツールで確認できます)、応答文字列は正しい div に追加され、ajaxComplete で削除されます。フォーム アクションを href として扱うと、正しい応答に加えて、欠落しているテンプレート 500 応答が返されます。

フォームの応答を DOM にロードするための最後の小さなステップを知っている人はいますか? これは私のajax成功関数です:

$('section')
.live('ajax:success', function(event, data, status, xhr) {
  $('#' + response_str).html(data);
});

show と edit を使用してから、リンクの href をキャプチャした後にe.preventDefault()使用することに注意してください。.load()フォームアクションが台無しになるため、公開には使用できません。

これが私のショー、編集、公開機能です。

// .live() because edit btn is an ajax loaded element
$('[id^=edit_s]').live('click', function(e) { 
  e.preventDefault();
  target = $(this).attr('href');
  sectionID = $(this).attr('id').match(/[\d]+$/);
  sectionLayer = $(this).attr('data-target');
  response_str = 'response_s' + sectionID;
  appropriateDiv.addClass(response_str);
  $("." + response_str).load(target);
});

//this could stand to be less ambigious. select the actual form for example.
$('[id^=publish_s]').live('click', function(e) {
  target = $(this).closest('form').attr('action');
  alert(target);
  appropriateDiv.addClass(response_str);
  $(this).addClass('disabled');
  //$("." + response_str).load(target); // doesn't work!
});

$('[id^=show_s]').live('click', function(e) {
  target = $(this).attr('href');
  sectionID = $(this).attr('id').match(/[\d]+$/);
  sectionLayer = $(this).attr('data-target'); // contains "#"
  appropriateDiv = $('div.tab-pane' + sectionLayer);

  // Don't need preventDefault() if tab since bootstrap does it
  if($(this).attr('data-toggle') != "tab") {
    e.preventDefault();
    appropriateDiv.removeClass('loaded');
  }

  response_str = 'response_s' + sectionID;
  if ($(appropriateDiv).hasClass('loaded')) {
    //alert("Already loaded, bro");
  } else {
    appropriateDiv.addClass(response_str + ' loaded');// ensure AJAX fills the right section
    $("." + response_str).load(target);
  }
});

前もって感謝します!

4

1 に答える 1

0

愚かな間違いであることが判明しました。私の成功関数では、クラスではなく ID で選択していました (愚かだと言いました)。

表示と編集が機能していた理由.load()は、選択した要素に応答を配置することが含まれているためです (duh)。

于 2012-12-19T18:40:44.000 に答える