4

Chrome バージョン 21.0.1180.89 を使用しています

i.hide()と callという入力があります.blur()。ぼかしイベントが発生しても、入力は実際にはフォーカスを失っていません。

これは文書化された動作ですか? 良い回避策はありますか?

ユーザーがEnterキーを押すか、フィールドがフォーカスを失ったときにテキストフィールドのデータを保存するバックボーンアプリを構築しています。TodoMC バックボーンのデモと同じです。

しかし、テンプレートが変更されるたびにテンプレートから要素全体を再構築するため、彼らはそれを回避します。CSSトランジションが壊れるので、私はそれをしたくありません。

編集:

関連するバックボーン コードのほとんど:

var app = app || {};

$(function() {
    'use strict';

    // Todo Item View
    // --------------

    // The DOM element for a todo item...
    app.TodoView = Backbone.View.extend({

        //... is a list tag.
        tagName:  'li',

        // Cache the template function for a single item.
        template: _.template( $('#item-template').html() ),

        // The DOM events specific to an item.
        events: {
            'click .toggle':    'togglecompleted',
            'dblclick label':   'edit',
            'click .destroy':   'clear',
            'keypress .edit':   'updateOnEnter',
            'blur .edit':       'close'
        },

        // Switch this view into `"editing"` mode, displaying the input field.
        edit: function() {
            this.$el.addClass('editing');
            this.input.focus();
        },

        // Close the `"editing"` mode, saving changes to the todo.
        close: function() {
            var value = this.input.val().trim();

            if ( value ) {
                this.model.save({ title: value });
            } else {
                this.clear();
            }

            this.$el.removeClass('editing');
            this.$el.addClass('syncing');
        },

        // If you hit `enter`, we're through editing the item.
        updateOnEnter: function( e ) {
            if ( e.which === ENTER_KEY ) {
                // Stupid hack to trigger a blur only once.
                this.$el.append(this.input.detach());
//              this.close();
            }
        },

        // Remove the item, destroy the model from *localStorage* and delete its view.
        clear: function() {
            this.model.destroy({wait: true});
            this.$el.addClass('deleting');
            this.$el.addClass('syncing');
        }
    });
});
4

0 に答える 0