1

Vista/W7 ガジェットの作成を試しています。私の実験では、システム上の特定のファイルの変更日を書きたいと思っています。問題は、文字列操作関数を使用したい場合、ガジェットが出力の書き込みを停止することです。ガジェットのコードの一部は次のようになります。

  function format_lmd(lmd)
  {
  // Parse something like "Sun Aug 26 17:13:22 UTC+0200"
  var lmdFields = lmd.split(' ');
  //weekday  = lmdFields[0];
  //month    = lmdFields[1];
  //monthday = lmdFields[2];
  //moment   = lmdFields[3];
  //return monthday+' '+month+' '+moment;
  return lmd;
  }

  function  paintGadget()
  {   
  var fileitem = System.Shell.itemFromPath("c:\\myfile.txt");
  //canvas.addTextObject('   '+fileitem.modifyDate, 'Segoe UI', 9, 'white', text_offset, 21);
  var result = null;
  result = '   ';
  result += format_lmd(fileitem.modifyDate);
  canvas.addTextObject(result, 'Segoe UI', 9, 'white', text_offset, 21);
  }

split の呼び出し (関数 format_lmd 内) により、スクリプトが停止しているように見えます (または、より良い方法: 例外がスローされます)。ドキュメントは、分割関数を使用して文字列を複数の部分に分割できることを示しているようですが、私の場合は機能しません。

質問:

  • 分割方法を正しく使用するにはどうすればよいですか?
  • 以前は Javascript を使用したことがなかったので、いつ "var" で変数を宣言し、いつ宣言しないかは謎のままです。ガジェットに使用できる Javascript の良い入門書はありますか?
  • ガジェットをデバッグする最良の方法は何ですか?

ありがとう、パトリック

編集: Javascript のデバッガーを有効にする方法を見つけました ( http://msdn.microsoft.com/en-us/library/bb456467%28v=VS.85%29.aspx#_sidebar_overview_debugging_basicを参照)。デバッグ ウィンドウがポップアップし、「オブジェクトが必要です」と表示されますが、これはあまり役に立ちません。

4

2 に答える 2

1

これは、WindowsデスクトップガジェットAPIとSystem.Shell名前空間の主要な問題の1つです。一部のコマンドは、JScriptによってネイティブに処理されないタイプを返します。幸いなことに、これはそのような場合ではありませんが、問題は似ています。私は答えにたどり着きますが、最初に、ちょっとしたサイドノートのとりとめのない話をします。

関数をチェックtypeof lmdインすると、「日付」が結果であることに気づきました。これについて奇妙なのは、ネイティブの日付型JScript/ECMAScriptがないことです-typeof new Date()結果は「オブジェクト」になります。これは、多くのSystem.Shell。*メソッドが.netの同等のメソッドにマップされ、データをJScriptネイティブタイプに変換することなく、結果がJScriptに返されるためです。Microsoftによる非常に近視眼的な実装。

lmdをデバッガーに出力すると、次のような文字列の結果が表示されます。

2009年11月25日水曜日11:06:30UTC

これは、文字列を期待する関数が非文字列引数を文字列に変換するためです。 System.Debug.outputString()も例外ではありません。これを実現すると、解決策が明確になります。「日付」から文字列への型変換を強制します。

var lmdFields = String(lmd.split(' '));
// or
var lmdFields = (lmd+"").split(' ');

//-> ["Wed","Nov","25","11:06:30","UTC","2009"]

日付をJavaScriptのDateオブジェクトに変換する場合は、 Date()コンストラクターに渡すだけです。

var lmdFields = new Date(lmd);
System.Debug.outputString(lmdFields.toLocaleString());
//-> "25 November 2009 11:06:30"
于 2010-08-21T17:45:54.633 に答える
0

日付の場合、これは役立つかもしれません(テストされていませんが、ガイドです)...

  function format_lmd(lmd)
  {
    month = lmd.getMonth()+1; // returns numeric value
    monthday = lmd.getDay(); // 0 for Sunday, 1 for Monday, 2 for Tuesday, and so on
    // not sure what you mean for 'moment'?
    return monthday+' '+month+' '+moment;
  }

月と日の値を配列で指定し、必要に応じてそれらを検索することができます。

参照: https ://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date#Methods

于 2010-08-09T01:39:12.840 に答える