2012-02-19 80 views
1

我的網頁包含帖子列表,每個帖子都有自己的按鈕。這些帖子是從服務器JSON檢索的。每個人都應該有自己的href,這是json對象的一部分。所以很自然,我期望這個工作(假設 「fb_data」 是JSON對象{fb_data:{HREF:my_post_path}):呈現類似fb的按鈕與knockoutjs

(html fb-like widget code, with simple knockoutjs data-bind) 
<li class="fb"> 
    <div class="fb-like" data-send="false" data-layout="button_count" data-width="85" ata-show-faces="false" data-bind="attr: {href: fb_data.href}"></div> 
    <span class="like-container"><span class="likebox" title=""></span>&nbsp;Friends<br/>Like this!</span> 
</li> 

,這樣沒有工作。 我嘗試另一種方法和自定義實現了這一目的結合:

(html) 
<li class="fb"> 
    <div class="fb-like" data-send="false" data-layout="button_count" data-width="85" data-show-faces="false" data-bind="render_like: fb_data"></div> 
    <span class="like-container"><span class="likebox" title=""></ span>&nbsp;Friends<br/>Like this!</span> 
</li> 

(js) 
ko.bindingHandlers.render_like = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     var fb = valueAccessor(); 
     $(element).attr(fb); 
     FB.XFBML.parse(element); 
    } 
}; 

好了,這也不能工作。我轉硬盤,醜,不優雅的方式,並有這樣的:

(html) 
<li class="fb" data-bind="render_like: fb_data"></li> 

(js) 
ko.bindingHandlers.render_like = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     var fb = valueAccessor(); 
     var fb_like_str = '<div class="fb-like" data-send="false" data layout="button_count" data-width="85" data-show-faces="false"' href="' + fb.href + '" </div>'; 
     fb_like_str += '<span class="like-container"><span class="likebox" title=""></span>&nbsp;Friends<br/>Like this!</span>'; 
     $(element).html(fb_like_str); 
     FB.XFBML.parse(element); 
    } 
}; 

一個工作,但感覺並不像淘汰賽精神...什麼 是第2的問題?

+0

第一個應該可以正常工作。它給你什麼錯誤?您可能還想顯示您的JavaScript代碼。 – 2012-02-20 16:17:13

+0

它沒有提供任何錯誤,它只是沒有正確地綁定href屬性(所以fb-like按鈕並沒有指向真正的帖子) – 2012-02-20 16:31:44

+0

你能發佈javascript代碼嗎?或者甚至更好地重現jsfiddle.net上的問題 – 2012-02-20 16:38:23

回答

0

好吧,我想我已經知道了問題所在。啓動我的視圖模型後 FB.init應該來,這樣的 -

window.fbAsyncInit = function() { 
    FB.init({appId: 172535899504455, status: true, cookie: true, xfbml: true}); 
    var myVM = new myViewModel(rec_data, $("#myselector").get(0)); 
} 

現在漂亮的簡單的第一種方式是工作!

+0

這不適合我,我不得不使用綁定處理程序解決方案。 – Baz 2013-04-01 06:32:30