4

現在、ckeditor プラグインに取り組んでいます。selectbox は DB からデータを取得し、selectbox に表示される最初の文字しか取得できません。

get_pages.php

$query = selectQuery('
    SELECT title, pageID
    FROM  `page_info` 
    WHERE partnerID =?',array($partnerId));
$test = '';
foreach ($query as $key => $value) {
$test .= $value['title'].",";
}

Plugin.js

var pages = $.post(
        "/action/ac_select_pages.php",
        { pid: "1" },
        function(data) {
            return (data);         
    }
);

pages = pages.responseText.split(',');

私の変数:

pages: Array[31]  
    0: "Home"  
    1: "Control Panel"  
    2: "24/7 Support"  
    3: "Script / Databases"  
    4: "Last Announcment"  
    5: "E-mail: No Limit"  
    6: "Webmail & Push Mail"  

等々..

セレクトボックスを作るために私がすること:

{
    type : 'select',
    id : 'moreinfo',
    label : 'Meerinfo Link',
    style : 'width:300px;',
    items : pages ,
    setup : function( element )
    {
    this.setValue( element.getAttribute( "moreinfo" ) );
    },
    commit : function( element )
    {
    var id = this.getValue();
    // If the field is non-empty, use its value to set the element's id attribute.
    if ( id )
    element.setAttribute( 'moreinfo', id );
    // If on editing the value was removed by the user, the id attribute needs to be removed.
    // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.element.html#removeAttribute
    else if ( !this.insertMode )
        element.removeAttribute( 'moreinfo' );
    }
}

ご覧のとおり、配列を items に入れるだけですが、最初の文字しか表示されません ダイアログブロック

それで、私は何を間違っていますか?

4

2 に答える 2

1

ということで、まとめると…

split() 文字列を部分文字列に分割することにより、文字列オブジェクトを文字列の配列に分割します。

したがって、おそらくあなたpages.responseTextは次のようになります。

Home,Control Panel,24/7 Support,Script / Databases,Last Announcment,E-mail: No Limit,Webmail & Push Mail

つまり、実行後pages = pages.responseText.split(',');pages次のようになります (配列):

["Home", "Control Panel", "24/7 Support", "Script / Databases", "Last Announcment", "E-mail: No Limit", "Webmail & Push Mail"]

以前のコメントによると、これは機能します:

var pages = [{0: 'Home', 1: 'Control Panel', ...}];

ご覧のとおり (複数の値を持つ配列):

["Home", "Control Panel", ...]

(いくつかのプロパティを持つ 1 つのオブジェクトを持つ配列) と同じではありません。

[{0: 'Home', 1: 'Control Panel', ...}]

これがすべて当てはまる場合、次のようなものが機能するはずです。

var pagesObject = {};
for (var i=0, max=pages.length; i<max; i += 1) {
  pagesObject[i] = pages[i];
}

var correctPages = [ pagesObject ];

デモはこちら: http://jsbin.com/ikazes/1/edit

于 2013-02-18T19:01:08.513 に答える
0

Ayman Sadadiの for ループに基づいて、最終的に正しくなりました:)

// page1, 1,00,page2, 12,00,page3, 23 \\
pages = pages.responseText.split(',00,');
// ["page1, 1","page2, 12","page3, 23"] \\
var a = [];
a[0] = '';
for (var b = 0; b < pages.length; b++) {
    var c = pages[b].split(', ');
    var pageName = c[0];
    var pageId = c[1];
    a[b] = [ pageName, c ];
};

a は現在:

a: Array[31]
  0: Array[2]
    0: "Home"
    1: Array[2]
      0: "Home"
      1: "1"
    length: 2
    __proto__: Array[0]
 1: Array[2]
    0: "Control Panel"
    1: Array[2]
      0: "Control Panel"
      1: "152"
    length: 2
    __proto__: Array[0]

これは必須と同じです[['Home']['Control Panel']]。それをアイテムとして使用すると、正しく機能します。

前の会話:

選択にローカルデータを入れてみてください。var pages = [{0: 'ホーム', 1: 'コントロール パネル', ...}];. ...


私はそれを試しました:)そしてそれは機能しますが、ページは常に追加および削除されるため、選択したページをハードコーディングできません


Ayman Safadi: 以前のコメントによると、これは機能します...

動作するようにハードコーディングした場合のみ[['home']['Control Panel']][{0: 'Home', 1: 'Control Panel', ...}] 動作しませんでした。言いたいことが少しわかりづらくてすみません。

私の問題を解決してくれてありがとう。
クレジットは Ayman Safadi / pbaris に送られます :)

于 2013-02-19T11:24:58.217 に答える