首先它似乎正在構建一個應用程序,它是JavaScript的嚴重依賴,並且確實很少在progressive enhancement條款。如果這是一個深思熟慮的決定,那麼很酷。
有一件事我會建議是儘量使用data-*
屬性而不是分裂ID擺弄周圍。而不是ActivityLike_ID
有一類ActivityLike
,並給這些元素的每個data-id
屬性Id
。你然後有;
$(document).on('click', '.ActivityLike', function() {
var theId = $(this).data('id');
});
太棒了。
因爲你有簡單的例子like <--> unlike
和comment <--> remove comment
這應該很容易在JavaScript中完成。您可以在選擇其中一個狀態時將元素添加到元素,也可以設置(nother)數據屬性。簡單地檢查你的代碼將會讓你知道如何渲染鏈接。
如果將來有可能發生更復雜的操作,您可能有興趣讓服務器控制頁面中要更改的內容(因爲服務器可能比客戶端有更多上下文)。
讓服務器返回像這樣的數據結構;
[
{
"selector": "#something",
"operator": "append",
"params": ["<div>Hi</div>"]
}
]
即,一個映射到jQuery操作的對象數組。 selector
描述了jQuery選擇器,operator
是要調用的jQuery方法,params
屬性是傳遞該方法的參數數組。
在你的AJAX請求的響應處理程序中,你可以這樣做;
for (var i=0;i<response.length;i++) {
var curr = response[i];
jQuery.fn[curr.operator].apply($(curr.selector), curr.params);
}
要處理這些操作。
作爲一個具體的例子,爲了讓HTML不像一個活動,服務器可以響應;
[
{
"selector": ".like[data-id=\"activityId\"]",
"operator": "html",
"params": ["you liked this activity, click to unlike"]
}
]
注意param
s必須是一個陣列(在本例中它僅僅有一個元素)。
我喜歡這個解決方案,謝謝!如果我理解得好?用戶有3個活動,他喜歡第二個活動,服務器返回:選擇器 - > .like,data-id - > activityId,運算符 - > html,params - >'你喜歡這個活動,點擊不像' – randomKek 2012-02-07 11:22:44
@MikeVercoelen :差不多。我已經更新了我的答案,以包含服務器應該返回的響應。 – Matt 2012-02-07 11:30:14
真棒會玩這個,謝謝你的答案夥計真的幫助我! :) – randomKek 2012-02-07 11:39:52