-1

期待している出力は、jqueryで作成している順序付けられていないリストです...これは、jsonファイルから入力します(プラグインとして作成しない場合は正常に機能します)。プラグインを構築するという概念は非常に新しいです。順序付けられていないリストを出力しないものを作成しようとしました

json ファイル構造

{
    "Categories": [
    {
        "cat_id":"1",
        "name":"Main Menu1",
         "sub_categories":[
         {
             "cat_id":"10",
             "name":" Sub Menu11",
             "sub_level_one_link":"http:\/\/one.com"
         },

私のjsファイル

//create plugin 
jQuery.fn.emrMenu= function (options) {
    myoptions = jQuery.extend ({ url: "error" }, options);

    if (myoptions.url=="error") { alert("Error:No data recieved"); return false; }
    $(this).html (myoptions.url);

    return this.each (function () { 

        //alert(myoptions.url+this.id);

        $.getJSON(myoptions.url,  function(data)
        {
            $.each(data.Categories, function(i, category)
            { 
                alert("test1");
                //get all sub menu items in list indexes      
                var submenudata='';
                $.each(category.sub_categories, function(i, sub_categories)
                { 
                    submenudata += "<li><a href='"+sub_categories.sub_level_one_link+"' <span>"+sub_categories.name+"</span></a></li>";

                });
                var menudata ="<li id='"+category.cat_id+"' class='has-sub '><a href='#'><span>"+category.name+"</span></a><ul>"+submenudata+"</ul></li>";                      
                //stringify unordered list and bind to div              
                var menu="<ul>"+menudata+"</ul>";

                //   $(menu).appendTo("#"this.id);
             });
        });           

        //alert (this.id);

    }); 
} 

そしてプラグインを呼び出しています:

<script>
$(document).ready(function() {

    $('#menu_n').emrMenu ({ url: "menu_data.json"});

});
</script>

この時点で私はかなり混乱しています。

4

1 に答える 1

0

http://jsfiddle.net/c6vnp/7/ URL をサンプル データに置き換え、.get 呼び出しを消去しました。しかし、ajax でデータを取得した場合と同じ結果が得られるはずです。

私がしたことは

var myoptions = jQuery.extend ({ url: "error" }, options);

それ以外の

myoptions = jQuery.extend ({ url: "error" }, options);

また、プラグイン全体を

(function($){

})(jQuery);

jQueryを$として参照します

また、メニューを「this」に追加するコメントアウトされた行、「this」は、その時点で望んでいるものではありません。元の「this」にいつでもアクセスできるように、プラグインの先頭で $this = $(this) を定義する必要があります。「これ」が何であるかを把握することは非常に重要です。私はいつも console.log(this); 確認するために、時々。

于 2012-08-28T03:39:40.177 に答える