什么是在Seaside动态生成一些JavaScript的简单方法?

时间:2011-01-25 19:54:56

标签: seaside

我正在尝试将Disqus添加到我正在撰写的博客中。为了处理Seaside会话,我需要为JS添加一个独特的discus_identifier或disqus_url。我覆盖了我的组件的#script方法,但它只能返回一个字符串文字。

我看到两个选项:

  1. 动态生成JS,将其保存到文件中,然后将该文件加载到我的组件中。
  2. 为每个博客条目添加永久链接。
  3. 有更简单的方法吗?或者这些方法中的一个(或两个)容易做到?我是Smalltalk和Seaside的新手,我不确定如何完成这两件事。

2 个答案:

答案 0 :(得分:1)

是的,有一种更简单的方法。您可以直接在#script方法中生成正确的Discus JS代码。它应该返回一个String文字但你可以动态创建这个String。例如,通过使用WriteStream。

您的博客条目也需要永久链接。您可以使用#initialRequest:方法来处理这些永久链接。

答案 1 :(得分:1)

动态javascript东西

如果我是对的,那就是转发按钮之类的东西。 (这是我手边的事情,为你提供例子)。

我在博客中所做的是一个名为BITRetweet的专业海边组件,您可以使用永久链接(以及用户名和样式首选项)进行配置。忘记文件的东西(只会使事情变得复杂),一切都在飞行中。它渲染与此:

BITRetweet>>renderContentOn: html

html script with: self customizedJavascript.
html script url: self buttonJavascriptSource.

BITRetweet>>customizedJavascript

| script |

script := JSScript new.

script add: (('"',self permalink,'"') asJSObject assignTo: 'tweetmeme_url').

isCompact ifTrue:[
    script add: ('"compact"' asJSObject assignTo: 'tweetmeme_style')].

script add: (('"',username,'"') asJSObject assignTo: 'tweetmeme_source').
script add: (('"',shortener,'"') asJSObject assignTo: 'tweetmeme_service').

^ script 

BITRetweet>>>buttonJavascriptSource

"Answers the url to the source of the script for the button.
See: 
http://help.tweetmeme.com/2009/04/06/tweetmeme-button/"

^ 'http://tweetmeme.com/i/scripts/button.js'

and finally a little hack for String, like this:

String>>asJSObject

^ JSObject new alias: self

html script with: self customizedJavascript. html script url: self buttonJavascriptSource.

使用永久链接

对于固定链接部分,有两件事:

  1. 生成它
  2. 使用它(当请求附带时让应用程序做出反应)
  3. 1你可以这样做:

    | script | script := JSScript new. script add: (('"',self permalink,'"') asJSObject assignTo: 'tweetmeme_url'). isCompact ifTrue:[ script add: ('"compact"' asJSObject assignTo: 'tweetmeme_style')]. script add: (('"',username,'"') asJSObject assignTo: 'tweetmeme_source'). script add: (('"',shortener,'"') asJSObject assignTo: 'tweetmeme_service'). ^ script

    "Answers the url to the source of the script for the button. See: http://help.tweetmeme.com/2009/04/06/tweetmeme-button/" ^ 'http://tweetmeme.com/i/scripts/button.js'

    ^ JSObject new alias: self

    for 2你必须在你的主应用程序组件中做这样的事情

    PostComponent>>updateUrl: anUrl

    super updateUrl: anUrl.
    
    anUrl addToPath: model asURLNice
    

    Post>>asURLNice

    "Answers the receiver in an (destructive) encoded 
    way which is url friendly"
    
    ^ String streamContents: [:stream|
        self do:[:char|
            char isSeparator 
                ifTrue:[stream nextPut: $-]
                ifFalse:[
                    char isAlphaNumeric ifTrue:[
                        stream nextPut: char asLowercase asNonDiacritical]]]]
    

    实例

    您可以在my blogselective creativity中查看所有相关信息 asNonDiacritical对我来说是必要的,因为我有三种语言的博客,但如果你需要,可以在squeaksource中找到DiacriticalSupport

    玩得开心

    O /