OpenEdx - 无法在 xblock 中使用 author_view

OpenEdx - can't get author_view to be used in xblock

我似乎无法在我创建的 Xblock 中执行 author_view

也许我误解了 author_view 的意图,或者我期望它做什么。根据我的理解,一旦您将 Xblock 添加到 Vertical(例如,当您可以重新排序 Xblock 或单击其编辑按钮时,Xblock 内显示的内容就是显示在工作室中的视图)。

我进行了大量搜索和文档阅读,但找不到任何使用 author_view 的直接示例。但是像这样的陈述:

The view used to preview this XBlock for instructors in Studio. Defaults to student_view if an author_view is not defined.

让我觉得这就是我要找的东西。

在我的例子中,Xblock 在学生视图中做一些 javascript 工作,因此没有内容可显示给学生。在 Studio 视图中,我希望它显示可编辑参数并且 not 执行任何 javascript.

我的 xblock python 文件的相关部分是:

class MyXblock(Xblock):
    def resource_string(self, path):
        data = pkg_resources.resource_string(__name__, path)
        return data.decode("utf8")

    def student_view(self, context=None):
        data = { # some context data }
        # student_view.html contains an empty tag - nothing to display
        html = self.resource_string("static/html/student_view.html")
        frag = Fragment(html.format(self=self))
        frag.add_css(self.resource_string("static/css/style.css"))

        frag.add_javascript(self.resource_string("static/js/src/student.js"))
        frag.initialize_js('MyXblock', data)
        return frag

    def author_view(self, context=None):
        # author_view.html contains html to display current xblock parameter values
        html = self.resource_string("static/html/author_view.html")
        frag = Fragment(html.format(self=self))
        frag.add_css(self.resource_string("static/css/style.css"))
        return frag

    def studio_view(self, context=None):
        html = self.resource_string("static/html/studio_view_edit.html")
        frag = Fragment(html.format(self=self))
        frag.add_css(self.resource_string("static/css/style.css"))
        frag.add_javascript(self.resource_string("static/js/src/studio_edit.js"))
        frag.initialize_js('MyXblock')
        return frag           

我已经尝试将日志语句添加到两个 student/author 视图中,但唯一被调用的是 student_view.

我最终有一个解决方案,包括检查 LMS_ROOT_URL 并将其与 javascript 中的 window.location 进行比较,并有条件地执行 javascript 或填充myxblock_xblock html 标签...但我真的不喜欢它,尤其是知道这个 author_view 就在这里,并且可能完全符合我的要求。

如有任何见解,我们将不胜感激!谢谢!

在 xblock 的 author_view 遇到同样的问题后,我在 this google groups thread

中找到了解决方案

您只需将变量 has_author_view = True 添加到您的 xblock,edX Studio 将使用您的 author_view。这似乎是一种解决方法,我还没有找到任何其他对此变量的引用。