我正在开发一个 Web 应用程序,我发现自己有大约 1000 行代码,并注意到我的很多功能都是完全相同的,只是根据上下文进行了一些更改。例如,我构建的应用程序管理 SharePoint,因此我要么与组合作,要么与用户合作。我正在尝试找到减少代码中冗余/重复的最佳方法。
这是它的样子:
现在我有两个功能,一个填充我的所有用户,另一个填充我的所有组。我还有其他功能也非常相似,但根据我正在使用的内容进行了一些更改。
JS:
function populateGroups(){
//Populate the group list
strHTMLSiteGroups = "";
userAssigned.empty();
userAvailable.empty();
$("#my_SiteGroups option:gt(0)").remove();
$().SPServices({
operation: "GetGroupCollectionFromSite",
completefunc: function(xData, Status) {
groupCollection = $(xData.responseXML);
groupCollection.find("Group").each(function() {
strHTMLSiteGroups += "<option value='" + $(this).attr("Name")+ "' data-groupid='" + $(this).attr("ID") + "'>" + $(this).attr("Name") + "</option>";
});
group.append(strHTMLSiteGroups);
$('#groupOwner').append('<optgroup label="---Groups---"></optgroup>');
$('#groupOwner').append(strHTMLSiteGroups);
}
});
}
function populateUsers() {
//Populate the user list
strHTMLSiteUsers = "";
$("#my_SiteUsers option:gt(0)").remove(); //remove all except first
$().SPServices({
operation: "GetUserCollectionFromSite",
completefunc: function(xData, Status) {
userCollection = $(xData.responseXML);
userCollection.find("User").each(function() {
strHTMLSiteUsers += "<option value='" + $(this).attr("LoginName") + "' data-userid='"+ $(this).attr("ID")+ "'>" + $(this).attr("Name") + "</option>";
});
user.append(strHTMLSiteUsers);
$('#groupOwner').append(strHTMLSiteUsers);
}
});
}
我计划在这个应用程序中使用 Angular、Backbone 或 Knockoutjs。我还不认识他们,所以这是我必须学习的东西。然而,我的目标是拥有其中一个,而不是两个。从那里有一个控制器(菜单项)向用户显示与用户或组一起工作的选项。那时,视图会更新以反映与上下文(用户或组)相关的项目,并有一个函数可以根据我所处的上下文返回组或用户。
无论如何要改进我在下面执行此操作的功能,还是为每个上下文提供 2 个功能?