0

「todo_form」というテンプレートにこれがありました:

<input type="hidden" id="priority" value="{{todo.priority}}">

次に、フォームに「レンダリングされた」コールバックを設定して、その非表示の入力から値を読み取り、jQuery UI スライダーを設定しました。フォームは、リストから todo をクリックすることによって取り込まれました (登録されたセッション変数「active_todo」を介して)。

したがって、優先度 10 の todo をクリックしてから、同じ優先度の他の todo をクリックすると、$('#priority').val()空白が返されます... 優先度が異なる todo をクリックする限り、問題なく機能しました。コンソールを使用してこれを確認しました - このフィールドは空白に設定されています!

私の解決策は、代わりに登録された「active_todo」をチェックして優先度を引き出すことでしたが、非表示の入力も更新する必要がありました: $("#priority").val(active_todo.priority).

誰かアイデアはありますか?元の (動作していない) レンダリングされたコールバックは次のとおりです。

Template.todo_form.rendered = ->
    priority = $( "#priority" ).val();
    $( "#priority-slider" ).slider(
        range: "min"
        value: priority
        min: 1
        max: 10
        orientation: 'vertical'
        slide: ( event, ui ) ->
            $( "#priority" ).val( ui.value)
    )

そして、これが私がそれを「修正」した方法です:

Template.todo_form.rendered = ->
    active_todo = Session.get('active_todo');
    $("#priority-slider" ).slider(
        range: "min"
        value: active_todo.priority
        min: 1
        max: 10
        orientation: 'vertical'
        slide: ( event, ui ) ->
            $("#priority").val( ui.value)
    )
    $("#priority").val(active_todo.priority) # SHOULDN'T HAVE TO DO THIS!!!
4

1 に答える 1

1

あなたが達成しようとしていることを理解するのは少し難しいですが、選択した ToDo アイテムの優先度を値が示すスライダーが必要であり、スライダーでこの値を変更できるようにしたいだけだと思います。 .

もしそうなら、その隠された入力は本当に必要ありません. 本当に必要なのは、「現在の todo」をリアクティブ データ ソースにすることだけです。そして、「active_todo」セッション変数ですでにそれを持っています。JavaScriptで私が提案するものは次のとおりです(これは完全にオンザフライでテストされていません):

var prioComp;

Template.todo_form.rendered = function() {
  $("#priority-slider").slider({
    range: 'min',
    value: 1,
    min: 1,
    max: 10
    start: function() { 
      prioComp.stop();
    },
    stop: function(event, ui) {  
      Session.get('active_todo').priority = ui.value;
      trackPriority();
    }
  });
  trackPriority();
};

function trackPriority () {
  prioComp = Deps.autorun(function() {
    $("#priority-slider").slider('value', Session.get('active_todo').priority);
  });    
}

私が言ったように、テストされていないので、ここにバグが1つか2つあるかもしれませんが、少なくともコードを見て、私が何をしようとしているのかを理解してください.

于 2013-04-05T21:20:18.430 に答える