UI BootstrapのPagerが機能しなくてハマった
AngularJSでBootstrapを扱うためのライブラリ、UI Bootstrapを使ってみたんですが、サンプルコードを参考にPagerを実装してもなぜか機能してくれなくてハマってしまいました。
サンプルコードを記載しているページではちゃんと機能しているので、AngularJSとui.bootstrapのバージョンの組み合わせでうまくいかなくなったりしてるのかなぁと勝手に想像しています。
めんどうなのでちゃんと確認はしていませんが、以下のようにすることで機能できるようにはできました。
サンプルコード
Markup
<pager total-items="totalItems" ng-model="currentPage"></pager>
$scope.pageChanged = function() { console.log('Page changed to: ' + $scope.currentPage); };
Angular directives for Bootstrap
サンプルコードではこうなっているのですが、これだとpageChangedが呼ばれませんでした。
修正後のコード
Markup
<pager ng-change="pageChanged()" total-items="totalItems" ng-model="currentPage"></pager>
なので、ng-changeを明示的に記述し呼ばれるように修正。
Bootstrapファーストガイド―CSS設計の手間を大幅に削減!
- 作者: 相澤裕介
- 出版社/メーカー: カットシステム
- 発売日: 2014/11/26
- メディア: 単行本
- この商品を含むブログ (2件) を見る
Flaskでリダイレクトしたよとかいう警告が出る
こんな警告が出て解消するのに少しハマった。
'A request was sent to this URL (http://localhost/my/contributors) but a redirect was issued automatically by the routing system to "http://localhost:5000/my/contributors/". Make sure to directly send your POST-requ
est to this URL since we can't make browsers or HTTP clients redirect with form data reliably or without user interaction.
Note: this exception is only raised in debug mode'
たぶん、flask側でリダイレクトしなくて済むようにちゃんとURLを指定しろよって言ってるんだと思う。
ルーティングはこうなっているのに
@app.route('/my/contributors/', methods=['POST'])
URLはこうなっていた。
$http({ method : 'post', url : '/my/contributors', // 後ろにスラがない! data : {id: $scope.contributor.id} })
スラッシュを加えることで解消されました。
go getで導入したパッケージをIntelliJ IDEAに認識させるための設定
Go言語にて依存関係を解決するためのimportにはアンダースコア(ブランク識別子)を別名とする
golangを触っていてなんだこれって思ったのでメモしておく。
importのアンダースコア
サンプルコードを見ていてこんな記述を見かけた。
パッケージ名の前にアンダースコアが書かれている。
import ( "fmt" _ "github.com/go-sql-driver/mysql" // <- 先頭のアンダースコアはなにもの? )
なにこれ?
これはブランク識別子と呼ばれるもので、importしたパッケージと依存関係のあるパッケージをimportするときにこれを指定するらしい。
golangではimportしたパッケージをコード中で使用しないとコンパイルエラーとなるので、依存関係を解決するためのimportであることを明示してあげないといけない。
インポート宣言は、インポート「する側」と「される側」の依存関係を宣言します。自分自身のパッケージをインポートすること、またはインポートしたパッケージ内でエクスポートされている識別子を一切参照しないことは誤った使い方です。インポートによる副作用(初期化)のためだけにパッケージをインポートするときは、パッケージ名としてブランク識別子を使ってください。
いいわけ
正直、ちゃんと読み取れてるか自信ないので間違った解説をしているかも。
参考
The Go Programming Language Specification - The Go Programming Language
Go言語仕様翻訳(part12) - golang.jp
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2015/07/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
prototype.jsのsetStyleで指定するcssプロパティ名にはハイフンを含めてはいけない
恥ずかしながらjQueryなJavaScriptばかり触ってきたので、prototype.jsにおいては基本であると思われるところでハマってしまったのでメモしておく。
prototype.jsのsetStyleで指定するcssプロパティ名にハイフンを含めると、FireFoxにおいてスタイルが反映されない。
例
たとえば、background-colorを設定する場合、以下のように指定するとFireFoxには反映されない。
$('hoge').setStyle({ 'background-color': '#000000' });
ではどうするか。こうする。
$('hoge').setStyle({ 'backgroundColor': '#000000' });
ついでにjQueryではどうなるか実験してみたところ、FireFoxでもハイフン付きで問題なく反映された。
$('#hoge').css({ 'background-color': '#000000' });
ブラウザー間の微妙な動作の違いにはいつも悩まされる。
golangでxmlをパースする
Go言語でxmlをパースしようとしてけっこうハマったのでメモを残しておきます。
Xmlをパースする手順
1. 構造体を定義する
たとえばこんなxmlがあるとする。
str := ` <?xml version="1.0" encoding="UTF-8"?> <Nicovideo> <thumb> <title>動画タイトル</title> <length>12:59</length> </thumb> </Nicovideo> `
そしたらこんな構造体を用意してあげる。
type Nicovideo struct { Thumb Thumb `xml:"thumb"` } type Thumb struct { Title string `xml:"title"` Length string `xml:"length"` }
このとき注意することは2点。
また、構造体を定義する際、欲しい要素がtitleだけであるなら、Lengthフィールドは定義する必要はない。
2. 構造体を初期化する
nicoXml := Nicovideo{Thumb{"", ""}}
3. パース関数を呼び出す
err := xml.Unmarshal([]byte(str), &nicoXml)
4. パースしたものを参照する
fmt.Println(nicoXml) fmt.Println("title: " + nicoXml.Thumb.Title) fmt.Println("length: " + nicoXml.Thumb.Length)
構造体を通してアクセスする。
サンプルコード
package main import ( "log" "fmt" "encoding/xml" ) func main() { str := ` <?xml version="1.0" encoding="UTF-8"?> <Nicovideo> <thumb> <title>動画タイトル</title> <length>12:59</length> </thumb> </Nicovideo> ` nicoXml := Nicovideo{Thumb{"", ""}} err := xml.Unmarshal([]byte(str), &nicoXml) if err != nil { log.Fatal(err) return } fmt.Println(nicoXml) fmt.Println("title: " + nicoXml.Thumb.Title) fmt.Println("length: " + nicoXml.Thumb.Length) } type Nicovideo struct { Thumb Thumb `xml:"thumb"` } type Thumb struct { Title string `xml:"title"` Length string `xml:"length"` }
いいわけ
構造体のフィールドを大文字始まりで定義するのは、Go言語の仕様で定められているのか、自分の使い方が悪いのかよく分かっていません。
参考
Cybozu ガルーン API のレスポンスのXMLを golang でパースする - Qiita
Go言語でXMLのパースしたった - uokadaの見逃し三振は嫌いです
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2015/07/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る