9

我目前正在尝试使用新的 WordPress 3.5 媒体管理器,它使用主干.js 来创建和填充其模式窗口。

我想要做的是:用户单击上传按钮,弹出媒体管理器,用户选择图像,按插入,然后将图像保存到自定义字段。

所有这些都已经奏效了,我唯一想改变的是用我自己的模板填充媒体上传器的侧边栏(用户可以添加标题、标题、选择大小等)。

我已经阅读了数十篇关于如何使用骨干网的教程,但现在有点卡住了。到目前为止,这是我的一些代码:

//defined earlier:
var frame;

//on click:

if ( file_frame )
{
    file_frame.open();
    return;
}
else
{
    // Create the media frame.
    file_frame  = wp.media(
    {
    frame:   'select',
    state:   'mystate',
    library:   {type: 'image'},
    multiple:   false
    });

    file_frame.states.add([

    new media.controller.Library({
        id:         'mystate',
        title: 'my title',
        priority:   20,
        toolbar:    'select',
        filterable: 'uploaded',
        library:    media.query( file_frame.options.library ),
        multiple:   file_frame.options.multiple ? 'reset' : false,
        editable:   true,
        displayUserSettings: false,
        displaySettings: true,
        allowLocalEdits: true,
          //AttachmentView: ?

    }),
    ]);

file_frame.open();

}

我也尝试过像这样注册自己的模板:

media.view.Attachment.mySidebar = media.view.Settings.AttachmentDisplay.extend(
{
    className: 'attachment-display-settings',
    template:  media.template('avia-choose-size')
});

但问题是:我不知道只加载这个模板而不是原始侧边栏。将它作为 AttachmentView 参数传递显然不起作用,因为它替换了整个模板而不仅仅是侧边栏。

有一些backbone.js 经验的人可以提供帮助吗?

4

1 回答 1

2

我不确定您是否找到了问题的答案,但我想让您知道,我只需修复对不以“wp”为前缀的“媒体”对象的引用,就可以为我工作上述代码。所以...您的新自定义状态代码应如下所示:

file_frame.states.add([

new wp.media.controller.Library({
    id:         'mystate',
    title: 'my title',
    priority:   20,
    toolbar:    'select',
    filterable: 'uploaded',
    library:    wp.media.query( file_frame.options.library ),
    multiple:   file_frame.options.multiple ? 'reset' : false,
    editable:   true,
    displayUserSettings: false,
    displaySettings: true,
    allowLocalEdits: true,
      //AttachmentView: ?

}),
]);

我个人想替换“选择”框架的初始默认状态,这是通过添加states : 'mystate'到 file_frame 选项来实现的,导致初始化返回而不创建默认的“选择”状态。然后按照您的演示继续创建“mystate”(对象语法有两个小的变化)。

我感谢您在此处引入方法论!它工作得很好,我之前完全迷失和沮丧。

于 2013-07-19T20:41:27.700 回答