te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - svelte: how do svelte run function between if block? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - svelte: how do svelte run function between if block? - Stack Overflow

programmeradmin3浏览0评论

I am trying to put a function between if else block. below is what i imagine it would be.:

<script>
let condition=false
function function_here(event){
   if(event){
      condition = true;
   }else if(!event){
      condition = false;
   }else{
      condition = !condition;
   }
</script>
{#each post as posts}
   {#if posts.object1==="match" }
      <p>HTML HERE</p>
      {function_here(true)}
   {/if}
{/each}
{#if condition}
   <button>type1</button>
{:else}
   <button>type2</button>
{/if}

if only during looping post result, if found posts.object1 match, i need to change the status of variable "condition"

however , this example return result "undefined".

How do i put function in between if block in svelte?

I am trying to put a function between if else block. below is what i imagine it would be.:

<script>
let condition=false
function function_here(event){
   if(event){
      condition = true;
   }else if(!event){
      condition = false;
   }else{
      condition = !condition;
   }
</script>
{#each post as posts}
   {#if posts.object1==="match" }
      <p>HTML HERE</p>
      {function_here(true)}
   {/if}
{/each}
{#if condition}
   <button>type1</button>
{:else}
   <button>type2</button>
{/if}

if only during looping post result, if found posts.object1 match, i need to change the status of variable "condition"

however , this example return result "undefined".

How do i put function in between if block in svelte?

Share Improve this question edited Jun 28, 2021 at 15:47 Krishna Satwaji Khandagale 2,26018 silver badges25 bronze badges asked Sep 14, 2020 at 5:18 dwerty_weirddwerty_weird 1834 silver badges17 bronze badges 4
  • 1 Can you provide a better example? You are passing true to it, so it will always do condition = true. I fail to see the purpose of that. And you likely see undefined because the function doesn’t return anything. – Felix Kling Commented Sep 14, 2020 at 5:30
  • 1 Maybe what you really want is to pute the value upfront with condition = posts.some(post => post.object1 === 'match') – Felix Kling Commented Sep 14, 2020 at 5:34
  • its one of the first things you should know about javascript. if an function does not return anything, it will return undefined. your function doesnt return anything – Ilijanovic Commented Sep 14, 2020 at 5:35
  • hi felix. i need to revert condition back to false, after every post loop. i need to use toggle like function in some other part of code, but in this part, i need to be able to pass true when post.object1 is match. that why the function look like that. – dwerty_weird Commented Sep 20, 2020 at 3:08
Add a ment  | 

4 Answers 4

Reset to default 6

Calling functions inside the template like that is considered bad practice in Svelte, that code belongs in the script part of the ponent. The best approach this problem is a reactive variable so that it also changes if posts changes:

$: condition = posts.... // something based on posts

What condition actually works out to be is up to you though, the code you gave in your answer seems very simplified from the actual code.

I understand the other answers give a suggestion to use best practices. However, to answer the general question of running or calling JS code in Svelte within the HTML portions of it can be done as follows.

<script>
...
</script>

<!-- HTML part -->
{functionCall() || ""}  <-- This avoids 'undefined' showing up in your markup!

Or alternatively,

<!-- HTML part -->
{"" ?? functionCall()}  <-- This avoids 'undefined' showing up in your markup!

Better yet, use the void operator. Using the void and the Nullish operator ensures that, even if your function returns a value, nothing is ever displayed in your markup.

<!-- HTML part -->
{void functionCall() ?? ""} <-- This avoids any sort of value from showing up in your markup!

You are trying to approach this in a way that JSX would like. Why not abstract that logic into plain JS inside the <script>?

<script>
    let condition = false
    function function_here(event) {
        if (event) {
            condition = true;
        } else if (!event) {
            condition = false;
        } else {
            condition = !condition;
        }
    }

    for (post in posts) {
        if (post.object1 === 'match') {
            function_here(true)
        }
    }
</script>
{#each post as posts}
    {#if post.object1 === "match" }
        <p>HTML HERE</p>
    {/if}
{/each}
{#if condition}
    <button>type1</button>
{:else}
    <button>type2</button>
{/if}
发布评论

评论列表(0)

  1. 暂无评论