1

VoltRb でファイルの読み取りを行い、それらのファイルの内容をビューに埋め込もうとしています。私は当初、サーバー側でファイルを読み取り (クライアント側はファイルの読み取りをサポートしていないため)、それらのファイルの文字列をクライアントに渡すことを計画していましたが、クライアント上のファイルの空の文字列。

私の問題を示すコードを次に示します。

file.txt

file contents

main_controller.rb

if RUBY_ENGINE == 'ruby'
  file       = File.open("app/files_to_read/lib/file.txt", "r")
  $file_text = file.read
  file.close
  puts $file_text # returns "file contents" on the server side
  puts $file_text.class # returns "String" on the server side
end

module Main
  class MainController < Volt::ModelController
    model :page

    def index
      page._text = $file_text
      puts $file_text # returns an empty string in the browser console
    end
    ...
  end
end

index.html

<:Title>
  Home

<:Body>
  <h1>Home</h1>
  <p>{{ _text }}</p>
  <!-- ^ an empty string -->

私のディレクトリツリーは次のようになります。

app
├── files_to_read
│   └── lib
│       └── file.txt
└── main
    ├── assets
    ├── config
    ├── controllers
    │   └── main_controller.rb
    ├── lib
    ├── tasks
    └── views
        └── main
            ├── about.html
            ├── index.html
            └── main.html

ファイルに空の文字列が表示されるのはなぜですか? これを修正するにはどうすればよいですか?

4

1 に答える 1

1

そのため、コントローラはクライアント上で 1 回、サーバー上で 1 回、合計 2 回実行されることに注意してください。したがって、クライアント 1 はサーバー上のインスタンスとは異なるインスタンスになるため、$file_text グローバルにアクセスできません。

ただし、ファイルを読み取り、ファイルのテキストを返すタスクを作成することはできます。@RickCarlino の優れたタスク チュートリアル ビデオをご覧ください: http://datamelon.io/blog/2015/creating-volt-task-objects.html

ありがとう

于 2015-07-07T16:19:54.357 に答える