4

我有以下将多个锚元素与“团队”类绑定为 x 可编辑的 select2 输入。每个 a.team 都有不同的数据源(传递给 Web 服务的 ID 不同,以便返回适用的团队列表),但不幸的是,一旦绑定了第一个 a.team,就会使用该数据源 URL对于页面上所有后续的 a.team 输入(因此,错误的团队列表绑定到每个后续的 x-editable select2 输入)。

是否可以“重置” select2 的 data 属性,以便它尊重每个 a.team 元素的每个数据源?还是有其他解决方案?

$('a.team').editable({
    ajaxOptions: {
        dataType: 'json',
        type: 'POST'
    },
    emptytext: 'TBD',
    placement: 'bottom',
    success: function (response, newValue) {
        return editableResponse(response, newValue);
    },
    select2: {
        allowClear: true,
        placeholder: 'Select a team',
        width: '200px',
        id: function (item) {
            return item.id;
        },
        ajax: {
            dataType: 'json',
            results: function (data, page) {
                return { results: data };
            }
        },
    }
});

页面上有多个 a.team 锚点,如下所示:

  <a href="#" class="ur-team label label-inverse" data-type="select2" data-pk="@match.Id" data-source="@Url.Action("GetTeams", "Teams", new { scheduleId = match.ScheduleId })" data-value="@match.AwayTeamId" data-text="@match.AwayTeam" data-name="away" data-title="Update away team" data-url="@Url.Action("UpdateTeam", "AdminMatches")">@match.AwayTeam</a>

注意:我已经验证只有第一个 x-editable select2 输入中的 ID 用于所有其他 select2 AJAX 调用。换句话说,这不是数据缓存问题(它是“一旦绑定,所有其他数据源引用都将被忽略”问题)。

更新:这是一个复制问题的快速而肮脏的小提琴:http: //jsfiddle.net/ovalsquare/k9b3d/8/。请注意,两者最终都绑定到 list2 而不是 list,然后是 list2。

4

1 回答 1

8

不确定这是否是您已经想到的解决方法之一,或者这可能如何影响您的应用程序的性能。但是单独初始化每个.team元素是有效的。

我将进一步研究,看看是否能找到更好的方法,但这是当前的解决方案:

$('a.team').each(function(){
    $(this).editable({
        ajaxOptions: {
            dataType: 'json',
            type: 'POST'
        },
        emptytext: 'TBD',
        placement: 'bottom',
        success: function (response, newValue) {
            return editableResponse(response, newValue);
        },
        select2: {
            allowClear: true,
            placeholder: 'Select a team',
            width: '200px',
            id: function (item) {
                return item.id;
            },
            ajax: {
                dataType: 'json',
                results: function (data, page) {
                    return { results: data };
                }
            },
        }
    });
});

http://jsfiddle.net/trevordowdle/k9b3d/11/

更好的解决方法是在editable没有源数据属性的情况下进行初始化:

<a href="#" class="team" data-type="select2" data-pk="1" data-getSource="/list" data-value="100" data-text="Team A" data-name="home" data-title="Update home team" data-url="/post">Team A</a>

.team然后通过通过以下方式设置源在初始化后添加它option

$('a.team').each(function(){
    $(this).editable('option','source',$(this).data('getSource'));
});

但不幸的是,设置这种方式时它不起作用source。我能找到的最佳解决方案是上面的那个。

看起来这里有几个 X-editable 的错误:

当使用不同的sources. 并用方法设置源option

于 2013-12-27T16:47:38.533 回答