2017-11-02 4 views
0

jsrender/jsviewsで問題を発行してください。 jsrender v.0.9.83をうまく利用した巨大なページを構築しました。jsrenderをjsviews {{else}}に移行する -

しかし、私はjsviews v.0.9.89を組み込もうとしているときに(また、jsrender v.0.9.89を使用しようとしている)、私は最も奇妙なバグにぶち当たっています。

{{else}}ブロックでエラーが発生しているようです。ここで

があればelseブロックの一例である:

{{if device_comment}} 
    {{:device_comment}} 
{{else}} 
    {{:device_name}} 
{{/if}} 

これは、以前のバージョンでうまくは問題を働いていません。

今すぐエラーをレンダリングしかしjsviewsレポート:私は見つけることができます

JsViews Error: Syntax error 
Compiled template code: 

// jsvTmpl 
var v,t=j._tag,c=j._cnvt,ret="" 

+"\n<tr data-id=\""; 
try{ 
ret+=((v=data.id)!=null?v:""); 
}catch(e){ret+=j._err(e,view,undefined);}ret=ret 
+"\">\n <td><input type=\"checkbox\" class=\"sel\"/></td>\n <td>"; 
try{ 
ret+=((v=data.id)!=null?v:""); 
}catch(e){ret+=j._err(e,view,undefined);}ret=ret 

+"<br/>("; 
try{ 
ret+=((v=data.id)!=null?v:""); 
}catch(e){ret+=j._err(e,view,undefined);}ret=ret 
+")</td>\n <td>\n  "; 
try{ 
ret+=t("if",view,this,[ 
{view:view,tmpl:1, 
    params:{args:['device_comment']}, 
    args:[data.device_comment], 
    props:{}},; 
}catch(e){ret+=j._err(e,view,undefined);}ret=ret 
{view:view,tmpl:2, 
    params:{args:[]}, 
    args:[], 
    props:{}}]); 
}catch(e){ret+=j._err(e,view,undefined);} 
........ (cut to save space) ........... 
return ret; 
: "Unexpected token ;" 

唯一の予期しないトークンが「;」でありますこのパートでは:私が見つけて、エラーなしでテンプレートをレンダリングするすべての{{他のブロックを削除する場合は今

view:view,tmpl:1, 
    params:{args:['device_comment']}, 
    args:[data.device_comment], 
    props:{}},; 

、面白いことは、ある(もちろんのではない正確に私のページが他のブロックに基づいて書式設定を予期しているため) 。

私の質問は、どういうことですか? jsviewsは、これらの場合、jsrenderとは何か違うことをしたいのですか? なぜelseブロックが正しくレンダリングできないのですか?

EDIT: 私はjsviews、v.0.9.83の古いバージョンをダウンロードして、jsrenderのv.0.9.83でそれを使用し、すべての作品。私はこの{{else}}ブロック問題を取得しません。

新しいjsviewsライブラリに問題があると思われるので、私はこの質問を開いたままにします。うまくいけば、他の人がこの投稿に気づき、それを多くデバッグする必要はありません。

私はv.0.9.83で作業を続けます。

答えて

1

ありがとうございます。実際、それはv0.9.89で導入されたバグでした(以前のバージョンはv0.9.88まで有効でした)。

しかし、$.views.settings.debugMode(true);を設定した場合にのみ、バグが発生しました。 debugModeをfalseのままにした場合、正常に機能しました。

このバグはv0.9.90リリースで修正されています。ちなみに

、あなたが与えた具体的な例:

{{if device_comment}} 
    {{:device_comment}} 
{{else}} 
    {{:device_name}} 
{{/if}} 

あなたは単純に置き換えることができますため

もその問題を打つ回避
{{:device_comment||device_name}} 

...

+0

感謝をショートカット!ここで使用した例は、バグに焦点を当てるために簡略化されています。私の実際のコードは、両方のブロックでより多くのデータを埋めています。将来的にバグを報告する良い場所はありますか、これは容認できますか?あなたの素晴らしい仕事をありがとう! –

+1

バグを報告する最も良い場所は、GitHubのJsRenderまたはJsViewsのissueトラッカーです。 (http://www.jsviews.com/#communityを参照)。実際、このバグをJsRenderのissueトラッカーに追加するとよいでしょう。私はそれが準備ができているときに修正でそこに応答します... – BorisMoore

+0

v0.9.90でリリースされた修正を呼び出す私の答えを更新しました。 – BorisMoore

関連する問題