0

私はもともとこの質問をワグテールの問題キューで尋ねましたが、それは間違った場所だったと思います. (これはドキュメントのバグだと思いますが。)

とにかく、私の問題は、内部でStructBlocka を使用するカスタム クラスがあることです。フォームが自分の初期化子ListBlockの初期化子の両方をトリガーするメソッドをカスタム クラスに定義する必要があります。js_initializer() ListBlock

docsに基づく私の最初の試みは、次のようになりました。

# my_blocks.py
class ImageGalleryBlock(blocks.StructBlock):
    images = ListBlock(ImageChooserBlock(label='Image'))

    def js_initializer(self):
        return "ImageGallery"

    @property
    def media(self):
        return forms.Media(
            js=['app/js/admin/image-gallery.js']
        )


# image-gallery.js
function ImageGallery(prefix) {
    // Set up the Image Gallery block's custom form behavior...
}

これによりImageGallery()関数が実行されますが、ListBlockのイニシャライザが実行されなかったため、そのボタンはどれも機能しませんでした。

鶺鴒の問題キューで、次のようなことを試すように勧められました。

def js_initializer(self):
    initializer_js = super(HeadingBlock, self).js_initializer()
    my_custom_js = 'ImageGallery("%s")' % self.definition_prefix
    if initializer_js:
        # child blocks have custom JS initializers and need to be used
        return '%s,\n%s' % (initializer_js, my_custom_js)
    return my_custom_js

# image-gallery.js
function ImageGallery(prefix) {
  var init_image_gallery = function(element_prefix) {
    // Do stuff...
  };

  return init_image_gallery;
}

パーツを機能させるには、元の提案にいくつかの改善を加える必要がありましたImageGallery()が、それでもListBlock初期化子は実行されません。

生成されるイニシャライザ コードはImageGalleryBlock次のようになります。

{
    'name': ('ImageGalleryBlock'),
    'initializer': (StructBlock({
        'images': (ListBlock({
            'definitionPrefix': ('blockdef-63')
        }))
    }),
    ImageGallery("blockdef-91"))
},

私が実際に行う必要があるのは、渡される dict に別のキーを追加することだと感じていますが、StructBlockどのように最も曖昧な手がかりがありません。

4

1 に答える 1