jQuery tmpl 如果对象值 == 当前迭代值
jQuery tmpl if object value == current iteration value
SelectedPlayers我正在使用 jQuery 模板的网站上做一些工作。
我有一个 JSON 对象:
var data = [{
"CoachingSessionActivityID": 1,
"PlayersInTeams": [{"PlayerID": 1, "PlayerName": "Some Name"},{"PlayerID": 2, "PlayerName": "Another Name"}],
"SelectedPlayers":[{"PlayerID": 1, "PlayerName": "Some Name"}]
},{
"CoachingSessionActivityID": 2,
"PlayersInTeams": [{"PlayerID": 1, "PlayerName": "Some Name"},{"PlayerID": 2, "PlayerName": "Another Name"}],
"SelectedPlayers":[{"PlayerID": 1, "PlayerName": "Some Name"}]
}];
如果当前迭代 PlayerID 在 selected玩家反对。
<select id="playersList_${CoachingSessionActivityID}" class="form-control players-list" multiple="multiple" name="playersList">
{{each(PlayerID, PlayerName) PlayersInTeams}}
{{if checkForValue(SelectedPlayers == PlayerID)}}
<option value="${PlayerID}" selected="selected">${PlayerName}</option>
{{else}}
<option value="${PlayerID}">${PlayerName}</option>
{{/if}}
{{/each}}
</select>
我正在使用此函数来识别玩家是否在 selected 列表中:
function checkForValue(json, value) {
for (key in json) {
if (typeof (json[key]) === "object") {
return checkForValue(json[key], value);
} else if (json[key] == value) {
return true;
}
}
return false;
}
问题
问题只是 1 项被识别为 selected 值。我们的实际数据是 "PlayersInTeams" 有 150 名球员,一些教练课程有超过 20 名 select 球员。
有什么想法吗?
@Arunraj 是对的,我的函数显然在返回 true 时结束,因此它没有迭代完整列表。
我从这个答案中找到了答案:
本质上是将 obj.some(...)
与以下函数一起使用:
function hasValue(obj, key, value) {
return obj.hasOwnProperty(key) && obj[key] === value;
}
在问题的范围内,解决方案是:
{{each(PlayerID, PlayerName) PlayersInTeams}}
{{if SelectedPlayers.some(function(player){ return hasValue(player, "PlayerID", PlayerID)}) }}
<option value="${PlayerID}" selected="selected">${PlayerName}</option>
{{else}}
<option value="${PlayerID}">${PlayerName}</option>
{{/if}}
{{/each}}
SelectedPlayers我正在使用 jQuery 模板的网站上做一些工作。
我有一个 JSON 对象:
var data = [{
"CoachingSessionActivityID": 1,
"PlayersInTeams": [{"PlayerID": 1, "PlayerName": "Some Name"},{"PlayerID": 2, "PlayerName": "Another Name"}],
"SelectedPlayers":[{"PlayerID": 1, "PlayerName": "Some Name"}]
},{
"CoachingSessionActivityID": 2,
"PlayersInTeams": [{"PlayerID": 1, "PlayerName": "Some Name"},{"PlayerID": 2, "PlayerName": "Another Name"}],
"SelectedPlayers":[{"PlayerID": 1, "PlayerName": "Some Name"}]
}];
如果当前迭代 PlayerID 在 selected玩家反对。
<select id="playersList_${CoachingSessionActivityID}" class="form-control players-list" multiple="multiple" name="playersList">
{{each(PlayerID, PlayerName) PlayersInTeams}}
{{if checkForValue(SelectedPlayers == PlayerID)}}
<option value="${PlayerID}" selected="selected">${PlayerName}</option>
{{else}}
<option value="${PlayerID}">${PlayerName}</option>
{{/if}}
{{/each}}
</select>
我正在使用此函数来识别玩家是否在 selected 列表中:
function checkForValue(json, value) {
for (key in json) {
if (typeof (json[key]) === "object") {
return checkForValue(json[key], value);
} else if (json[key] == value) {
return true;
}
}
return false;
}
问题
问题只是 1 项被识别为 selected 值。我们的实际数据是 "PlayersInTeams" 有 150 名球员,一些教练课程有超过 20 名 select 球员。
有什么想法吗?
@Arunraj 是对的,我的函数显然在返回 true 时结束,因此它没有迭代完整列表。
我从这个答案中找到了答案:
本质上是将 obj.some(...)
与以下函数一起使用:
function hasValue(obj, key, value) {
return obj.hasOwnProperty(key) && obj[key] === value;
}
在问题的范围内,解决方案是:
{{each(PlayerID, PlayerName) PlayersInTeams}}
{{if SelectedPlayers.some(function(player){ return hasValue(player, "PlayerID", PlayerID)}) }}
<option value="${PlayerID}" selected="selected">${PlayerName}</option>
{{else}}
<option value="${PlayerID}">${PlayerName}</option>
{{/if}}
{{/each}}