簡體   English   中英

X可編輯,如果不再存在於動態源中,如何顯示已保存的值

[英]X-editable how to show saved value if it is not in the dynamic source anymore

我在新項目中將X-editable與bootstrap一起使用。

我使用的是動態來源,效果很好。 新值保存在數據庫中,那里沒有問題。

關鍵是我有多個選擇選項,其中一些只能選擇一次。 這就是為什么我使用動態源。

當我選擇只應選擇一次的值之一時,就會出現問題,因為更新源時,保存的值將不再位於源中。 如果我選擇任何其他值,它將正確顯示更新后的值。 而且,如果我刷新頁面,新值也會正確顯示(但是,這當然是因為html代碼中的$ object-> award-> name只是顯示了新值)。

在過去的幾個小時中,我嘗試了許多不同的操作,但無法正常工作。

我怎么解決這個問題?

這是javascript:

$(function(){
        //edit form style - popup or inline
        $.fn.editable.defaults.mode = 'popup';
        $('.pUpdate').editable({
            validate: function(value) {
                if($.trim(value) == '')
                    return 'Value is required.';
            },
            type: 'text',
            url: posturl,
            title: 'Edit Status',
            placement: 'top',
            send:'always',
            emptytext: 'Click to add a value',
            sourceCache: false,
            ajaxOptions: {
                dataType: 'json'
            },
            success: function(response, newValue) {

                // refresh total probability
                updateProbability();

                // this does not work:
                //var $that = $(this);
                //setTimeout(function() {
                //    $that.editable('option', 'source', {{ $app['url_generator']->generate('wheeloffortune-getawardsforselect', ['wheel_id' => $wheel->id]) }});
                //}, 0);

                // this does not work:
                // return {newValue: response.newValue};
            }
        })
    });

這是html元素:

<td><a class="pUpdate update_awards"
              data-pk="{{ $object->id }}"
              data-name="award_id"
              data-type="select"
              data-source="{{ $app['url_generator']->generate('myroute', ['param' => $object2->id]) }}"
              data-emptytext="Click to select a value"
              >{{ $object->award->name }}</a></td>

據我所知,X可編輯不支持此功能。

因此,我不得不訴諸於簡單地使用jQuery更新文本。 我確保json響應包含要顯示的新文本,並在成功回調中調用一個函數來更新相關元素的文本。

JavaScript現在將如下所示:

$(function(){
    //edit form style - popup or inline
    $.fn.editable.defaults.mode = 'popup';
    $('.pUpdate').editable({
        validate: function(value) {
            if($.trim(value) == '')
                return 'Value is required.';
        },
        type: 'text',
        url: posturl,
        title: 'Edit Status',
        placement: 'top',
        send:'always',
        emptytext: 'Click to add a value',
        sourceCache: false,
        ajaxOptions: {
            dataType: 'json'
        },
        success: function(response, newValue) {

            // refresh total probability
            updateProbability();

            // update text for award elements only
            var element = $(this);
            if(element.hasClass('update_awards')) {
                updateText(element, response);
            }
        }
    })
});

function updateText(element, response) {
    $(document).ajaxComplete(function() {
        element.text(response.newText);
        element.removeClass('editable-empty');
    });
}

注意我還必須刪除editable-empty類。

我在這里可能會有點幸運,因為成功回調中已經具有函數updateProbabilityAjax(),該函數正在執行Ajax請求,這就是為什么我可以使用.ajaxComplete()的原因。 我注意到,一旦X-editable從服務器獲得成功響應,就會觸發成功回調,但要在完成頁面上的元素更新之前觸發。 如果沒有jQuery ajax請求等待,我將沒有其他選擇,然后在updateText函數中使用setTimeout()。 否則,X-editable實際上會在我的函數updateText更新它之后更新元素:)

希望這對某人有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM