рдлреНрд░реЗрдВрдбрд▓реА рдУрдкрди рд╕реНрдкреЗрд╕ рдЬреЗрдПрд╕: рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рд░реИрдкрд░рд╛ рдХреНрд░рд┐рдПрд╢рди

рдЕрдиреБрдХреВрд▓ рдУрдкрди рд╕реНрдкреЗрд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рдпреБрд╡рд╛ рдврд╛рдВрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реИ :-)


"рдлреНрд░реЗрдВрдбрд▓реА рдУрдкрди рд╕реНрдкреЗрд╕" рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдФрд░ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░реЗрдВрдЧреЗред

рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдореБрдЦреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

  1. рдкреВрд░реНрдг рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкреНрд░рддрд┐рдкрд╛рджрди
  2. рд╕рд░реНрд╡рд░ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдореЛрдб рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдХреНрд▓рд╛рдЗрдВрдЯ FSQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЦрддрд░рд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХреНрд╕реЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдФрд░ рдлреЙрд╕рдПрдб рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЙрдкреА рдкреЗрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░рддрд╛ рд╣реИред

рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рд░рд╣рд┐рдд рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА HTML рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рдВ, рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдврд╝реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рдЦреБрд▓реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред

рдЖрд╡реЗрджрди рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛


рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ-рдкреЗрдЬ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ 2 рдЯреЗрдореНрдкреНрд▓реЗрдЯ (рд╡рд┐рдВрдбреЛрдЬрд╝) рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рдорджреНрджреЗрдирдЬрд░, рд╣рдо рдПрдХ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА FSQL рдХрд╛рдо рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддред рд╣рдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБ:

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ - рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
рд╕реАрдПрд╕рдПрд╕ - рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
fos - рдирд╡реАрдирддрдо рдмреАрдЯрд╛ рдорд┐рддреНрд░рддрд╛рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред site/en/download
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрд╖реНрдЯрдкреНрд░рдж favicon.ico рд░рдЦреЗрдВ: favicon.ico

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рддреБрд░рдВрдд рд╕реНрдЯрд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ css рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ: window.css рдФрд░ styles.css

рдЕрдЧрд▓рд╛, application.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдпрдВ рдмрдирд╛рдПрдВ:

var fos = require("./fos/fos"); fos.module({ name: "application.js", dependencies: [ "fos:NServer/Application.js", ], module: function(application) { application.setSettings({ port: 3001, packages: [], dynamicLoading: true, clientRenderingMode: "client", dataClient: { defaultConnection: "default", connections: { default: { type: "file", file: "data.fosdb" } }, }, onInitialize: function(a_event) { if (!a_event.error) { application.run(); } else { console.error(a_event.error); } } }); application.getRouter().add([ { route: "", controller: "fos:NServer/NControllers/Tmpl.js", source: "templates/page.tmpl", }, { route: "/css/*", controller: "fos:NServer/NControllers/File.js", source: "css", }, { route: "/templates/*", controller: "fos:NServer/NControllers/File.js", source: "templates", }, { route: "favicon.ico", controller: "fos:NServer/NControllers/File.js", source: "favicon.ico", }, ]); application.initialize(); } }); 

рдЕрдм рд╣рдо application.js рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ

рд╣рдордиреЗ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рдереА (рд╕реЗрдЯрд╕реЗрдЯрд┐рдВрдЧ рдкрджреНрдзрддрд┐ рдХреЗ рдкреИрдХреЗрдЬ рдкреИрд░рд╛рдореАрдЯрд░):

  ... application.setSettings({ port: 3001, packages: [], dynamicLoading: true, clientRenderingMode: "client", ... 

ClientRenderingMode рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рджреЛ рдореВрд▓реНрдп рд╣реИрдВ:

"рдХреНрд▓рд╛рдЗрдВрдЯ" - рдкреНрд░рддрд┐рдкрд╛рджрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ FSQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ HTML рдХреЛ рд╣реА рдПрдХрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ

"рд╕рд░реНрд╡рд░" - рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ

  ... packages: [], dynamicLoading: true, clientRenderingMode: "client", dataClient: { defaultConnection: "default", ... 

рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдирд╡рд╛рдЪрд╛рд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, MYSQL рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

 ... defaultConnection: "default", connections: { default: { type: "file", file: "data.fosdb" } }, }, ... 

рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЕрдВрд╢ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдХрд╛рд░ (рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░) "рдлрд╝рд╛рдЗрд▓" рд╣реИ, рдФрд░ рдПрдХрдорд╛рддреНрд░ рдлрд╝рд╛рдЗрд▓ рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдЧрд╛рдпрдм рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдмрдирд╛ рджреЗрдЧрд╛ред

рдкреЗрдЬ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВ


рдЕрдм рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ / page.tmpl рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд░реВрдЯ URL рд░реВрдЯ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИред

 //~OPTIONS { args:{ fosInclude: ["css/styles.css"], } } //~BLOCK main default <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> %{{ render.renderHTMLHeader(); }}% <script> function onClientSideRendering(a_event){ a_event.preventDefault(); fos.application.render({ template: "templates/window.tmpl", owner: document.body, args: { title: "Client side rendering", context: "Simple example of client side rendering" }, onResult: function(a_error, a_template){ } }); } function onServerSideRendering(a_event){ a_event.preventDefault(); fos.application.render({ template: "templates/window.tmpl", owner: document.body, renderMode: "server", args: { title: "Server side rendering", context: "Simple example of server side rendering" }, onResult: function(a_error, a_template){ } }); } </script> </head> <body> <div class="mainwrapper"> <div class="header markup"> Client Side Rendering </div> <div class="body-wrapper markup"> <div class="body markup"> <p class="example-link--container"><a onclick="onClientSideRendering(event);">Client side rendering</a></p> <p class="example-link--container"><a onclick="onServerSideRendering(event);">Server side rendering</a></p> </div> <div class="clear-body"></div> </div> </div> </body> </html> 

рдкреЗрдЬ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рджреЛ рд▓рд┐рдВрдХ рд╣реИрдВ, "рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ" рдФрд░ "рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ"ред рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдРрд╕реА рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВрдЧреА рдЬреЛ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдЪрд▓реЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд╕реЗ рдирд┐рдкрдЯреЗрдВред

рдЬрдм рд╣рдо "рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ" рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо onClientSideRendering () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ "рдЯреЗрдореНрдкреНрд▓реЗрдЯ / window.tmpl" рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░, рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, clientRenderingMode рдкреИрд░рд╛рдореАрдЯрд░ "рдХреНрд▓рд╛рдЗрдВрдЯ" рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИ :-)ред

 function onClientSideRendering(a_event){ a_event.preventDefault(); fos.application.render({ template: "templates/window.tmpl", owner: document.body, args: { title: "Client side rendering", context: "Simple example of client side rendering" }, onResult: function(a_error, a_template){ } }); } 

рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реА рд╡рд┐рдВрдбреЛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреГрд╖реНрда рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рд░рдЦрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрд╡рд╛рдореА рддрд░реНрдХ рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рд╣рдо рд╡рд┐рдВрдбреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ 2 рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ: рд╢реАрд░реНрд╖рдХ рдФрд░ рд╕рдВрджрд░реНрдн, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, fos :: NClient :: Application :: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рджреЗрдЦреЗрдВ

рджреВрд╕рд░рд╛ рд▓рд┐рдВрдХ onServerSideRendering () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рддреИрдпрд╛рд░ HTML рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдореЛрдб рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╕реЗрдЯ рд╣реИ "рдорд╛рди" рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХрд╛ рддрд░реНрдХред

 function onServerSideRendering(a_event){ a_event.preventDefault(); fos.application.render({ template: "templates/window.tmpl", owner: document.body, renderMode: "server", args: { title: "Server side rendering", context: "Simple example of server side rendering" }, onResult: function(a_error, a_template){ } }); } 

рдкреЙрдк-рдЕрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдПрдХ рдЖрд╡рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦрдирд╛


рдкреЙрдкрдЕрдк рд╡рд┐рдВрдбреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ / window.tmpl рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИред

 //~OPTIONS { args:{ fosWrapper: true, fosClass: "window", fosInclude: ["css/window.css"], title: "", context: "", } } //~BLOCK main default <div class="window-container"> <div class="window-close" name="close">x</div> <div class="window-title">${{args.title}}$</div> <div class="window-context">${{args.context}}$</div> </div> 

рдпрд╣рд╛рдБ рдЖрдкрдХреЗ рд▓рд┐рдП рджреЛ рдирдП рдкреИрд░рд╛рдореАрдЯрд░ fosWrapper рдФрд░ fosClass рд╣реИрдВред

рдЪрд▓реЛ fosWrapper рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдзреНрд╡рдЬ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕реНрдкреИрди рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЖрд╡рд░рдг рд╡рд╕реНрддреБ fos :: NRender :: Wrapper рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЬрд╛рдПрдВ : 3001 рдФрд░ "рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ" рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рд╣рдорд╛рд░рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИред рд╡рд┐рдВрдбреЛ рдкреЙрдкрдЕрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ css (css / window.css рдлрд╝рд╛рдЗрд▓) рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдореИрдВрдиреЗ рдЕрднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЗрдПрд╕ :-) :-) рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

DevTools рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ (Ctrl + Alt + i), рддрддреНрд╡реЛрдВ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реА рд╡рд┐рдВрдбреЛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдЫрд╡рд┐

рдЖрдХреГрддрд┐ рдореЗрдВ рдиреАрд▓реА рд░реЗрдЦрд╛ рд╣рдорд╛рд░реЗ рд╕реНрдкреИрди рд░реИрдкрд┐рдВрдЧ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде fos :: NRender :: рд░реИрдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рд╕рд┐рд╕реНрдЯрдо рддрд░реНрдХ fosClass рд╣реИред рдпрд╣ рдмрд╕ рдЖрд╡рд░рдг рд╡рд░реНрдЧ рдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ CSS рд╡рд░реНрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рдкреЙрдк-рдЕрдк рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рд╣рд╛рдВ, рд╣рдордиреЗ рдЕрднреА рддрдХ рдПрдХ рдХреНрд▓реЛрдЬрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ!

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдЕрдЧрд░ рд╕рд┐рд╕реНрдЯрдо рддрд░реНрдХ fosWrapper рд╕рддреНрдп рд╣реИ, рддреЛ рдЖрд╡рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ fos :: NRender :: Wrapper рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЖрд╡рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк [рдкреИрдЯрд░реНрди NAME] .wrapper.js рдХреЗ рдЕрдиреБрд░реВрдк рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреНрд▓рд╛рд╕ рдлреЛрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП "NRender :: Wrapperред

рдЕрдм рдЯреЗрдореНрдкреНрд▓реЗрдЯ / window.tmpl рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдЬрдм рдЖрдк рдкреНрд░рддреАрдХ "x" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВрдЧреЗ рддреЛ рдирдИ рдХрдХреНрд╖рд╛ рдХреЛ рд╣рдорд╛рд░реА рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░рдиреА рд╣реЛрдЧреАред

рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ / window.wrapper.js:

 fos.module({ name: "templates/window.wrapper.js", dependencies: ["fos:NRender/Wrapper.js"], module: function(Wrapper){ return function(a_initializeOptions) { var self = this; Wrapper.call(this, a_initializeOptions); var parentAttach = this._attach; this._attach = function(a_cb) { parentAttach.call(this, function(){ fos.addDomListener(fos.select(self.getDomElement(), "[name=close]")[0], "click", function(){ self.getDomElement().classList.add("window-hide"); setTimeout(function() { self.destroy(); }, 2000); }); a_cb(); }); } } } }); 

рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдмреЗрд╕ рдХреНрд▓рд╛рд╕ fos :: NRender :: Wrapper рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрд▓ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

 fos.module({ name: "templates/window.wrapper.js", dependencies: ["fos:NRender/Wrapper.js"], module: function(Wrapper){ return function(a_initializeOptions) { var self = this; Wrapper.call(this, a_initializeOptions); ... 

рд╣рдо fos рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж :: NRender :: Wrapper :: _ рд╕рдВрд▓рдЧреНрди рд╡рд┐рдзрд┐, рдЬрд┐рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рд╡рд┐рдВрдбреЛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрджрд░реНрдн рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ "рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рдХреГрддрд┐" рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред

  ... var parentAttach = this._attach; this._attach = function(a_cb) { parentAttach.call(this, function(){ fos.addDomListener(fos.select(self.getDomElement(), "[name=close]")[0], "click", function(){ self.getDomElement().classList.add("window-hide"); setTimeout(function() { self.destroy(); }, 2000); }); a_cb(); }); } ... 

рдкреНрд░рддреАрдХ "x" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛ рд╕реЗ рдЬреБрдбрд╝рдХрд░ рд╣рдо fos :: addDomListener рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ DOM рддрддреНрд╡ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рдХрдиреЗрдХреНрдЯреЗрдб рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдо рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рд╡рд░реНрдЧ "рд╡рд┐рдВрдбреЛ-рдЫрд┐рдкрд╛рдиреЗ" рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдХреНрд░реАрди рд╕реЗ рдЦрд┐рдбрд╝рдХреА рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдПрдиреАрдореЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо fos :: NRender :: Wrapper :: рд╡рд┐рдирд╛рд╢ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЖрд╡рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред

рд╕рднреА рдЖрд╡реЗрджрди рдкрддреНрд░, рд▓рд╛рдИрди рдФрд░ рдорд░рдореНрдордд !!!

 node application.js 

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд┐рдХрд╛рд╕ рд╕реНрдерд▓

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ

Source: https://habr.com/ru/post/hi473154/


All Articles